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