在sizeof关键字中使用++

时间:2011-05-05 07:15:18

标签: c puzzle sizeof

  

可能重复:
  what's the mechanism of sizeof() in C/C++?

您好,

我是一所大学的助教,最近,我向我的本科生展示了我发现的C拼图中的以下C代码:

int i = 5;
int j = sizeof(i++);
printf("%d\n%d\n", i, j);

我只有一个问题:为什么i的输出等于5,而不是6? ++被忽视了吗?这里发生了什么?谢谢!

5 个答案:

答案 0 :(得分:14)

不评估sizeof中的表达式 - 仅使用其类型。在这种情况下,类型是int,即i ++在评估时会产生的结果。这种行为是必要的,因为sizeof实际上是一个编译时操作(因此它的结果可用于调整数组大小),而不是运行时的操作。

答案 1 :(得分:3)

在编译时评估sizeof运算符。 sizeof(i ++)基本上以sizeof(int)读取编译器(丢弃++) 为了演示这一点,您可以查看您的小程序的程序集视图: enter image description here 正如你在标记的行中看到的那样,整数(4)的大小已经存在并且只是加载到i中。程序运行时不会对其进行评估甚至计算。

答案 2 :(得分:1)

是的,仅在sizeof内评估类型。

答案 3 :(得分:1)

  

为什么i的输出等于5,而不是6?

sizeof不评估其中的表达式,只评估类型。

我们要记住的是,sizeof不是函数,而是编译时运算符,因此,它无法评估其内容。

答案 4 :(得分:1)

主要原因是sizeof不是function,而是operator。除非存在可变长度数组,否则它主要在编译时进行评估。由于int的大小可以在编译时进行评估,因此返回4