2010.4.22
关于A*=B等价于A=A*B的问题
今天在论坛上看到一个帖子,说的是“A*=B等价于A=A*B”的误区。虽然自学C语言没多久,不过A*=B这种结构的语句自己还是经常用到的,好像也从没有出过什么问题。于是饶有兴趣的看了下。
楼主给出了一个例子:
- #include <stdio.h>
- #define Hong01 5
- #define Hong02 Hong01+100
- int main (void)
- {
- int a=2;
- a=a*Hong02;
- printf ("%d/n", a);
- return 0;
- }
关于define,我从来没用过,也不知道是干嘛的,好在楼主作了解释,说是定义宏。虽不详尽,但我大概也猜到是怎么一回事了。
以我的水平,看了这么个简单的小程序,完全没有感觉,也不知道这样的程序会出现什么意料之外的事情。于是——最简单也是最笨的办法——我自己在电脑上敲一遍再编译运行。终于我知道结果是怎么一回事了。
就上面这个程序为例,用“a=a*Hong02”,结果为110,也就是说a=a*Hong02等价于a=a*5+100。而用“a*=Hong02”则与我看到这个程序时所想的一样,结果为210,即a*=Hong02等价于a=a*(5+100)。
我也不知道这算是一个误区呢,还是一个BUG。不过,我想知道这么个区别,对自己以后编程应该会有用的。