看下面的代码:
#include <stdio.h>
int main(void)
{
int i = 1;
printf("%lu\n", sizeof(int[++i]));
printf("%d", i);
}
我正在测试sizeof
运算符,因为对可变长度数组类型的操作数进行了评估-如果有人也对此进行了澄清,但问题有所不同,我会很高兴。。 >
6.5.3.4/2
sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的括号名称。大小由操作数的类型确定。结果是一个整数。 如果操作数的类型是可变长度数组类型,则对操作数求值;否则,将不对操作数求值,并且结果为整数常量。
以上代码在GCC上的输出如下:
8
2
有人可以解释一下这8的来源吗?数组会衰减为指针吗? 请同时说明可变长度数组部分。
答案 0 :(得分:4)
int是4字节长。您正在传递sizeof运算符一个长度为2的int数组。要存储一个2的int数组,您需要2x4 = 8字节。
++i
在使用i之前将i的值从1增加到2。这就是为什么您的输出是8和2的原因。
答案 1 :(得分:4)
在评估int[++i]
时,i
的初始值为1。因此int[++i]
的评估值为int[2]
,即大小为int
的数组2.
假设系统上的int
为4字节,则此数组的大小为8字节。