打印

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

[复制链接]
1952|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;

使用特权

评论回复
5
itelectron|  楼主 | 2010-3-11 22:01 | 只看该作者
:L对指针 用的太少  最近  这项目 狂用指针   用的自己心理都 怕怕

使用特权

评论回复
6
Karlshen| | 2010-3-11 23:50 | 只看该作者
i+=1;   i++; 我感觉没区别

使用特权

评论回复
7
zhaoyu2005| | 2010-3-12 08:48 | 只看该作者
普通变量应用没有区别,但是牵涉到结合顺序就有区别了,我之前也不明白,HWM大侠一说才反应过来,就忘了替换下看看

使用特权

评论回复
8
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

主题

2762

帖子

8

粉丝