先来看大佬的一道题(有修改)
#include <stdio.h>
int main()
{
int i;
i = 10;
printf("%d\n", i);
printf("%d\n", sizeof(++i));
printf("%d\n", sizeof(i++));
printf("%d\n", i);
return 0;
}
这三行应该输出什么?
答案为:
10
4
4
10
首先,这题有关int变量的字节长度(不同于字符串或字符数组)
int 变量无论在32位还是64位都是占4字节,也就是说不管是 i++ 还是 ++i 都无所谓(它还是个int变量,字节长度还是4)
但是为什么经过 i++ 和 ++i 之后,i 的值还是为10呢?
。
。
摘抄大佬的话:
我们来好好看看C++标准中的描述:
5.3.3 sizeof
The sizeof operator yields the number of bytes in the object representation of its operand. The operand is either an expression, which is an unevaluated operand (Clause 5), or a parenthesized type-id.
也就是说,如果sizeof的操作数是一个表达式的话,这个表达式时不会被计算的。
sizeof当预处理看就行了,它后面括号里的东西,根本不求值,只根据C的一堆规则判断结果类型,然后返回结果类型的大小。另外一个操作符typeid(暂时还不会。。)也是如此。