看下面的代码:
#include <stdio.h>
int main(void)
{
int i = 1;
printf("%lu\n", sizeof(int[++i]));
printf("%d", i);
}
Run Code Online (Sandbox Code Playgroud)
我正在测试sizeof
运算符,因为评估了可变长度数组类型的操作数 -如果有人对此进行澄清,我会很高兴,但问题是不同的。
6.5.3.4/2
sizeof 运算符产生其操作数的大小(以字节为单位),它可以是表达式或类型的括号名称。大小由操作数的类型决定。结果是一个整数。如果操作数的类型是变长数组类型,则对操作数求值;否则,不计算操作数并且结果是整数常量。
上述代码在GCC上的输出如下:
8
2
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这个8来自哪里吗?数组是否衰减为指针?还请说明可变长度数组部分。
int[++i]
计算时,i
初始值为 1。因此int[++i]
计算结果为int[2]
,即大小为 2 的数组int
。
假设int
您的系统上的 an 为 4 字节,则该数组的大小为 8 字节。