首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

见见printf("%d"3*p/*q+7);这个输出是什么

2012-06-21 
看看printf(%d,3*-*p/*q+7)这个输出是什么?int i3,j5,*p&i,*q&jprintf(%d,3*-*p/*q+7)[解决办

看看printf("%d",3*-*p/*q+7);这个输出是什么?
int i=3,j=5,*p=&i,*q=&j;

printf("%d",3*-*p/*q+7);

[解决办法]
6
等价于
int k = 3 *(-3) / 5 + 7 = 6
[解决办法]
6;
printf("%d\n",3*-*p/ *q+7); // ‘/’后面要有个空格
[解决办法]
首先
3*-*p/*q+7
应该是
3*-*p/ *q+7 //要有空格,否则编译器会认为是/*注释,编译通不过
这个相当于
3*(-(*p))/(*q)+7
=3*(-3)/5+7
=-9/5+7
=-1+7
=6


[解决办法]
*优先级最高,然后是一元运算符 - 
然后乘除从左向右
最后加。
[解决办法]
应该是6吧,恩,这个表达式跟符号的优先级有关:3*-*p/ *q+7其中*p/*q由于*的优先级大于除号的优先级,所以*p/*q即3/5.又-的优先级高于/所以,是-3/5.就是这样的。
[解决办法]

探讨
首先
3*-*p/*q+7
应该是
3*-*p/ *q+7 //要有空格,否则编译器会认为是/*注释,编译通不过
这个相当于
3*(-(*p))/(*q)+7
=3*(-3)/5+7
=-9/5+7
=-1+7
=6

[解决办法]
应该是6。
[解决办法]
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。

不要写连自己也预测不了结果的代码!

热点排行