++,--要注意优先级,更要注意最后实际值!!

作者在 2008-09-22 21:45:35 发布以下内容
在C群里有人问a=5;b=++a*--a;为什么会是25?而不是30?
我也是先一楞,按正常的理解应该是30啊,++a=6,--a=5,b=6*5=30,有问题吗?
可人家说机子调试是25啊,于是我也上机调试,也是25.机子应该不会有问题,可人脑的逻辑出错了呢.于是我把a++,b++,++a,--b.四组合统统列出来放在一起调试,做对比分析,终于明白了问题的所在.以下是详细说明
 
调试程序代码如下:
#include <stdio.h>
main()
{
 int a=5;
 int b;
 b=a++*a--;
 printf ("%d\t%d\n",a,b); 
 b=++a*a--;
 printf ("%d\t%d\n",a,b); 
 b=a++*--a;
 printf ("%d\t%d\n",a,b); 
 b=++a*--a;
 printf ("%d\t%d\n",a,b); 
}
调试结果如下:
5        25
5        36
5        16
5        25
 
调试分析如下:
(1).
分析知道:
    b=a++*a--;
    b=++a*--a;
    这两种情况是一样的.
   为什么呢?
   b=++a*--a;在这里是++,--先运算,所以a=++a=5+1=6,然后a=--a=6-1=5,所以实际上最后a值是5,这样就得出了b=a*a=5*5=25了.
  千万不要以为++a中的a值仍为6,那是错误的,因为随着--a的运算,a的值最后又统一为最后结果值5了
   这就好像一个饼,我咬一口拍个照++a,再咬一口,再拍个照--a,你说这个时候这个饼什么模样?当然是咬了两口的模样a.比喻不是很好,理解就行,主要是注意最后用于计算的a值是多少,就算加括号也没有用b=(++a)*(--a);
(2).
b=++a*a--;
b=a++*--a;
这样我们就知道为什么,b=++a*a--;为36了
而b=a++*--a;为16就是--a=4,a++中的a为--a的结果值4,所以就是4*4=16了
  这里要注意的是--a优a++,至于是什么原因,请高手指明,谢谢!!
 
 
 
 
C语言 | 阅读 3390 次
文章评论,共0条
游客请输入验证码
浏览29223次
文章归档