sizeof 在这种情况下如何工作?

7 c arrays sizeof

看下面的代码:

#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来自哪里吗?数组是否衰减为指针?还请说明可变长度数组部分。

dbu*_*ush 4

int[++i]计算时,i初始值为 1。因此int[++i]计算结果为int[2],即大小为 2 的数组int

假设int您的系统上的 an 为 4 字节,则该数组的大小为 8 字节。