当我写这个C代码时,我随便编码:
#include <stdio.h>
int main()
{
int i;
i = 10;
printf("i : %d\n",i);
printf("sizeof(i++) is: %d\n",sizeof(i++));
printf("i : %d\n",i);
return 0;
}
当我运行代码时,我得到的结果是,
i : 10
sizeof(i++) is: 4
i : 10
我对这个结果感到困惑,因为我预计在sizeof运算符中的i ++会增加i。但似乎没有。因此,出于好奇,我写了以下程序:
#include <stdio.h>
int add(int i)
{
int a = i + 2;
return 4;
}
int main()
{
int i;
i = 10;
printf("i : %d\n",i);
printf("sizeof(i++) is: %d\n",add(i++));
printf("i : %d\n",i);
return 0;
}
对于这个程序,输出是:
i : 10
sizeof(i++) is: 4
i : 11
现在我越来越困惑了。
很抱歉,如果这是一个noob问题(我是),但我真的不明白如何谷歌这样的问题!
为什么这两个程序中i的值不同?请帮忙!
答案 0 :(得分:5)
sizeof()
不是运行时函数。它只是给出变量的大小或函数返回值的大小。
所以在第一个例子中,你只是得到一个整数后整数运算符的结果值的大小,这是一个整数... 4个字节。
在你的例子中,你只是打印返回4的方法的返回值,然后变量递增,然后打印11。
答案 1 :(得分:5)
sizeof
不评估其操作数(VLA类型情况除外)。
这意味着sizeof(*(T*)(NULL))
与sizeof(T)
相同,完全有效。