|
2鱼币
本帖最后由 我是外星猪 于 2013-2-24 00:39 编辑
编译器VC++6.0(SP6)
语言C
代码如下
问题一
#include <stdio.h>
void main()
{
int j = 5;
printf("%d,%d,%d\n", ++j, ++j, ++j);
}
自加以后再Debug里显示的结果是8,7,6。正常的是否应该是6,7,8 ?是不是因为在内存中存储是从高位到低位所以就显示8.7.6?又或者是因为运算符结合性显示结果自右向左?但是那也不对啊,求指教。
问题二
然后程序这样写
#include <stdio.h>
void main()
{
int i, j = 5;
i=(++j)+(++j)+(++j);
printf("%d\n",i);
}
结果为什么在Debug里显示为22?而不是21?自加应该是6+7+8=21为什么结果变为22
问题三
#include <stdio.h>
void main()
{
int i = 1;
printf("%d\n", -++i);
printf("%d\n", ++i);
}
输出结果是 -2,3
-2是因为运算符的优先级得到的,那么后面的++i为什么不是-2+1=1而是3?这个3是怎么得到的?
望各位前辈指点一下。谢谢了。
另祝大家元宵快乐
|
最佳答案
查看完整内容
问题一:
printf函数的处理机制是自右向左的。而输出是自左向右的,所以输出结果为 8,7,6 是正确的!
问题二;
对于你这样的输入,计算机会先进行优化的,也就是说它会先计算前两个++j,然后再和第三个运算,所以嘛,第一个和第二个++j ==7;第三个++j==8 结果当然为22 啦!
问题三:
第一个输出的是-i++,不是i=-i++,如果是i=-i++的话,第二个输出就是-1了。
回答完毕!
我再给你附上一片可以帮你解惑的文章,下面是链 ...
|