看看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.就是这样的。
[解决办法]
[解决办法]
应该是6。
[解决办法]
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
不要写连自己也预测不了结果的代码!