我的C语言学习日志(四)

2010.4.22
关于A*=B等价于A=A*B的问题
        今天在论坛上看到一个帖子,说的是“A*=B等价于A=A*B”的误区。虽然自学C语言没多久,不过A*=B这种结构的语句自己还是经常用到的,好像也从没有出过什么问题。于是饶有兴趣的看了下。
        楼主给出了一个例子:

Code:
  1. #include <stdio.h>   
  2.   
  3. #define Hong01 5   
  4. #define Hong02 Hong01+100   
  5. int main (void)   
  6. {   
  7.  int a=2;   
  8.  a=a*Hong02;   
  9.  printf ("%d/n", a);   
  10.  return 0;   
  11. }   
  12.   


        关于define,我从来没用过,也不知道是干嘛的,好在楼主作了解释,说是定义宏。虽不详尽,但我大概也猜到是怎么一回事了。
        以我的水平,看了这么个简单的小程序,完全没有感觉,也不知道这样的程序会出现什么意料之外的事情。于是——最简单也是最笨的办法——我自己在电脑上敲一遍再编译运行。终于我知道结果是怎么一回事了。
        就上面这个程序为例,用“a=a*Hong02”,结果为110,也就是说a=a*Hong02等价于a=a*5+100。而用“a*=Hong02”则与我看到这个程序时所想的一样,结果为210,即a*=Hong02等价于a=a*(5+100)。
        我也不知道这算是一个误区呢,还是一个BUG。不过,我想知道这么个区别,对自己以后编程应该会有用的。
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值