在sizeof关键字中使用++

9

可能重复:
C/C++中sizeof()的机制是什么?

您好,

我是一所大学的助教,最近我向我的本科生展示了我找到的以下来自C谜题的C代码:

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

我只有一个问题:为什么i的输出结果是5而不是6? ++被简单地忽略了吗? 这里发生了什么?谢谢!
5个回答

14

sizeof 中的表达式不会被计算 - 只使用它的类型。在这种情况下,类型是 int,如果 i++ 被计算,那么它将产生的结果就是 int 类型。这种行为是必要的,因为 sizeof 实际上是一个编译时操作(因此其结果可以用于诸如调整数组大小之类的事情),而不是运行时操作。


如果操作数是VLA,则它并不总是在编译时计算。 - Dietrich Epp
考虑 sizeof(int[i++])。 :-) - R.. GitHub STOP HELPING ICE

3

sizeof运算符在编译时计算。sizeof(i++)基本上被编译器看作是sizeof(int)(忽略++)。


为了证明这一点,您可以查看程序的汇编视图:

enter image description here

如您所见,在标记的行中,整数的大小(4)已经存在,并且只需加载到i中。它不会在程序运行时进行评估或计算。


1

是的,在sizeof内部只对类型进行评估。


1
为什么 i 的输出结果是 5 而不是 6?
sizeof 不会计算其内部的表达式,只会计算类型。
我们需要记住的是,sizeof 不是一个函数,而是一个编译时运算符,因此它无法计算其内容。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接