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

时间:2020-05-05 17:32:03

标签: c arrays sizeof

看下面的代码:

#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的来源吗?数组会衰减为指针吗? 请同时说明可变长度数组部分。

2 个答案:

答案 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字节。

相关问题