【发布时间】:2020-08-20 11:29:20
【问题描述】:
看下面的代码:
#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 是从哪里来的?数组是否衰减为指针? 还请说明变长数组部分。
【问题讨论】:
-
int[++i]在您的代码中变为int[2]。所以sizeof(int[++i])与2 * sizeof(int)相同,因为sizeof(int)在你的机器上是4。 -
@Ardent Coder 请告诉我为什么这只需要
int[++i]而不需要像int a[++i]这样的 数组名称。 -
只有 type 对
sizeof很重要。就像int*表示一个整数指针(没有像您在函数原型中经常看到的那样指定名称),int[2]表示一个大小为 2 的整数数组。 -
@Ardent Coder 谢谢