多维数组的大小

Size of multi dimensional array

我试图获取多维数组的大小,并在 C 中编写了代码,如下所示。

#include <stdio.h>

char b[3][4];

int main(void){
    printf("Size of array b[3]=%d\n", sizeof(b[3]));  
    printf("Size of array b[2]=%d\n", sizeof(b[2]));
    printf("Size of array b[5]=%d\n", sizeof(b[5]));

    return 0;
}

在以上三个打印语句中,我得到的大小等于 4。有人可以解释 sizeof 在多维数组的情况下如何工作吗?为什么第三次打印出来的结果一样?

b 是行 34 的二维字符数组。

所以,如果你选择 sizeof(b),你将得到 12

b[0](通常是 b[i])具有大小为 4 的一维字符数组类型。所以。如果你拿 sizeof (b[0]) 你会得到 4.

b[0][0](通常是 b[i][j])的类型是 char。所以如果你拿 sizeof (b[0][0]) 你会得到 1.

sizeof 不依赖于数组索引。即使 b[0]b[100] 的类型保持不变,即使它可能超出数组内存的范围。

sizeof 运算符仅对类型进行操作。

b 的类型是三个元素的数组,它是四个字符的数组:char[3][4].

现在数组下标运算符b[n]被定义为等价于*(b + n),当数组用于指针运算(表达式b + n)时,它衰减为指向其第一个元素的指针。因此,表达式 b + n 的类型为 char (*)[4],解引用再次生成类型为 char[4].
的数组 TL;DR: b[n] 的类型是 char[4],与 n.

的值无关

并且该类型是 sizeof 操作的类型:sizeof(b[n]) 完全等同于 sizeof(char[4]),并且保证始终产生 4.