多维数组的大小
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
是行 3
列 4
的二维字符数组。
所以,如果你选择 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
.
我试图获取多维数组的大小,并在 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
是行 3
列 4
的二维字符数组。
所以,如果你选择 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
.