请教 i+=1; i++; 的区别

[复制链接]
1993|7
 楼主| itelectron 发表于 2010-3-11 13:43 | 显示全部楼层 |阅读模式
请教 i+=1;   i++; 的区别
 楼主| itelectron 发表于 2010-3-11 13:54 | 显示全部楼层
unsigned int Data[200];

#define        UsData        *(Data)
#define        UsData1        *(Data+1)
UsData1++;//编译不通过
UsData1+=1;
HWM 发表于 2010-3-11 17:25 | 显示全部楼层
++是针对变量的加一操作,“UsData1++;”经预处理后是如下语句:

      *(Data+1)++;

等价为

      *((Data+1)++);

故错误。

而"UsData1+=1;"预处理后是:

      *(Data+1) += 1;

等价于

      *(Data+1) = *(Data+1)  + 1;

这没有问题。
 楼主| itelectron 发表于 2010-3-11 21:57 | 显示全部楼层
谢谢 HWM  在加个括号就通过了(*(Data+1))

unsigned int Data[200];
#define        UsData1        (*(Data+1))
UsData1++;//编译通过了
UsData1+=1;
 楼主| itelectron 发表于 2010-3-11 22:01 | 显示全部楼层
:L对指针 用的太少  最近  这项目 狂用指针   用的自己心理都 怕怕
Karlshen 发表于 2010-3-11 23:50 | 显示全部楼层
i+=1;   i++; 我感觉没区别
zhaoyu2005 发表于 2010-3-12 08:48 | 显示全部楼层
普通变量应用没有区别,但是牵涉到结合顺序就有区别了,我之前也不明白,HWM大侠一说才反应过来,就忘了替换下看看
QuakeGod 发表于 2010-3-12 17:52 | 显示全部楼层
i+=1;   i++; 我感觉没区别
Karlshen 发表于 2010-3-11 23:50

有区别的。
编译成汇编就有区别了,
之所以有i++这个语句,是因为99.9999%的处理器里面都有INC 自增1这个指令。
而i+=1用的是ADD指令。
但是也比i=i+1要快。
翻译成汇编,
------------
i++
INC i
-------------
i+=1
mov a,1
add i,a
-------------
i=i+1
mov a,i
add a,1
mov i,a
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:MARK: zhi kan ji shu

274

主题

2761

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部