多维数组的大小

时间:2017-02-07 06:05:49

标签: 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;
}

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

2 个答案:

答案 0 :(得分:8)

b是行3和列4的二维字符数组。

因此,如果您选择sizeof(b),您将获得12

b[0](和b[i]一般)有一种大小为4的1D字符数组。所以。如果你选择sizeof (b[0]),你将获得4

b[0][0](一般b[i][j])的类型为char。因此,如果您选择sizeof (b[0][0]),您将获得1

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

答案 1 :(得分:0)

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