说我有一个代码:
int a[5];
printf("%d %d %d",sizeof(a));
输出为
20
由于a是指向整数a [0]的常量指针,因此sizeof(a)不应为4个字节,而是为什么为20个字节?
答案 0 :(得分:2)
由于a是指向整数a [0]的常量指针,因此sizeof(a)不应为4个字节,而是为什么为20个字节?
措辞很重要。如评论中所述,a
不是指针,而是数组。
a
在大多数情况下{3>}被转换为指向其第一个元素的指针。一种此类例外情况是它是sizeof
运算符的操作数。因此,sizeof
与sizeof(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));