在C语言中的数组上执行sizeof()运算符时,编译器如何解释

时间:2018-10-06 10:21:40

标签: c arrays pointers

说我有一个代码:

int a[5];
printf("%d %d %d",sizeof(a));

输出为

20

由于a是指向整数a [0]的常量指针,因此sizeof(a)不应为4个字节,而是为什么为20个字节?

2 个答案:

答案 0 :(得分:2)

  

由于a是指向整数a [0]的常量指针,因此sizeof(a)不应为4个字节,而是为什么为20个字节?

措辞很重要。如评论中所述,a不是指针,而是数组。

a 在大多数情况下{}被转换为指向其第一个元素的指针。一种此类例外情况是它是sizeof运算符的操作数。因此,sizeofsizeof(int[5])相似(而不是您期望的sizeof(int*)),它返回5 * sizeof(int)。如您所见,结果在大多数系统上很可能是20,因为sizeof(int)是4。


旁注:我假设您的意思是printf("%d", sizeof(a));而不是使用三个格式说明符。并且您应该在那里使用%zu,因为sizeof返回size_t,而不是int

答案 1 :(得分:0)

这是一个数组,因此有5个元素,分别为0、1、2、3、4,因此一个元素为4个字节,那么5个元素应为20个字节。 您可以将sizeOf作为

printf("%d", sizeof(a));