多维数组的大小

MCG*_*MCG 4 c arrays sizeof

我试图获得多维数组的大小,并在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;
}
Run Code Online (Sandbox Code Playgroud)

在以上三个打印语句中,我的大小等于4.有人可以解释sizeof多维数组的情况如何工作吗?为什么第三次打印的输出相同?

Ris*_*aje 8

b是行3和列的2D字符数组4.

所以,如果你带走,sizeof(b)你会得到12.

b[0](并且b[i]通常)具有一种大小的1D字符数组4.所以.如果你带走sizeof (b[0])你会得到4.

b[0][0](b[i][j]一般而言)有一种类型char.所以,如果你带走,sizeof (b[0][0])你会得到1.

sizeof不依赖于数组索引.即使对于b[0]b[100],类型仍保持相同,即使它可能超出阵列的内存范围.

  • @MCG:`sizeof b [5]`在非评估的上下文中完全没问题(因为`b [i]`不是VLA). (3认同)