可能重复:
C/C++中sizeof()的机制是什么?
您好,
我是一所大学的助教,最近我向我的本科生展示了我找到的以下来自C谜题的C代码:
int i = 5;
int j = sizeof(i++);
printf("%d\n%d\n", i, j);
我只有一个问题:为什么i的输出结果是5而不是6? ++被简单地忽略了吗? 这里发生了什么?谢谢!
可能重复:
C/C++中sizeof()的机制是什么?
您好,
我是一所大学的助教,最近我向我的本科生展示了我找到的以下来自C谜题的C代码:
int i = 5;
int j = sizeof(i++);
printf("%d\n%d\n", i, j);
sizeof 中的表达式不会被计算 - 只使用它的类型。在这种情况下,类型是 int,如果 i++ 被计算,那么它将产生的结果就是 int 类型。这种行为是必要的,因为 sizeof 实际上是一个编译时操作(因此其结果可以用于诸如调整数组大小之类的事情),而不是运行时操作。
sizeof运算符在编译时计算。sizeof(i++)基本上被编译器看作是sizeof(int)(忽略++)。
为了证明这一点,您可以查看程序的汇编视图:
如您所见,在标记的行中,整数的大小(4)已经存在,并且只需加载到i中。它不会在程序运行时进行评估或计算。
是的,在sizeof
内部只对类型进行评估。
sizeof
不是一个function
,而是一个operator
。除非有一个变量长度数组,否则它大多在编译时评估。由于int
的大小可以在编译时评估,因此它返回4
。
sizeof(int[i++])
。 :-) - R.. GitHub STOP HELPING ICE