| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 970 人关注过本帖
标题:请教个关于++i问题
只看楼主 加入收藏
小旬_C
Rank: 2
等 级:论坛游民
帖 子:72
专家分:33
注 册:2010-7-25
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:17 
请教个关于++i问题
为什么
p=(++i)+(++i)+(++i)
是I自增三次后在相加,而不是三个I各自 自增1了以后相加
2010-09-05 11:29
TGM316750432
Rank: 2
来 自:河南周口
等 级:论坛游民
帖 子:56
专家分:97
注 册:2010-8-27
收藏
得分:0 
我也看迷糊了,再追加个问题
程序代码:
#include<stdio.h>
int main()
{
    int i=1;
    int p=(++i);
    int s=++i;
    int q=(++i)+(++i);
    printf("%d %d %d\n",p,s,q);
    getchar();
    return 0;
}
输出结果为:2 3 10
(++i)和++i 怎么有不同结果(DEVC++下运行)
2010-09-05 11:53
aa920521
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-8-11
收藏
得分:0 
求解。。。。。。。。。。。。。。。。。。。。。。

[ 本帖最后由 aa920521 于 2010-9-5 12:43 编辑 ]
2010-09-05 12:41
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
可能是,括号的优先的等级很高于赋值运算符,所以想计算括号再赋值,先赋值再自加。吧!?!?!?

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2010-09-05 12:43
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:5 
p=(++i)+(++i)+(++i);
mov         eax,dword ptr [i]
add         eax,1
mov         dword ptr [i],eax
mov         ecx,dword ptr [i]
add         ecx,1
mov         dword ptr [i],ecx
mov         edx,dword ptr [i]
add         edx,1
mov         dword ptr [i],edx
mov         eax,dword ptr [i]
add         eax,dword ptr [i]
add         eax,dword ptr [i]
mov         dword ptr [p],eax
这种类型的问题看反汇编 一目了然 优先(++i) 然后再从变量i所在的内存取值转移到寄存器相加
2010-09-05 12:53
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
输出结果为:2 3 10
我是不太明白最后一个为什么是10?

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-09-05 12:57
aa920521
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-8-11
收藏
得分:0 
我好像明白了。。。。。。。。
2010-09-05 13:02
aa920521
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-8-11
收藏
得分:0 
int i=1;
    int p=++i;/*i=2;p=2,*/
    int s=++i;/*i=3;s=3*/
    int q=(++i)+(++i);/*i=4;i=5;q=i+i;q=10*/   
         这里q=i+i    进行两次自加运算,第一次是4第二次就是5了               
2010-09-05 13:16
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
完全明白 谢谢楼上

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-09-05 13:22
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:5 
p=(++i)+(++i)+(++i)
这样的表达式I优先自增,没有中间值,是一次性的把I的自增全部完成。
借5楼的代码用下
mov         eax,dword ptr [i]
add         eax,1                     ;增一次
mov         dword ptr [i],eax
mov         ecx,dword ptr [i]
add         ecx,1                     ;增二次
mov         dword ptr [i],ecx
mov         edx,dword ptr [i]
add         edx,1                     ;增三次
mov         dword ptr [i],edx         ;增完送回变量I的地址
mov         eax,dword ptr [i]         ;I送寄存器中准备+
add         eax,dword ptr [i]     
add         eax,dword ptr [i]         ;I+I+I完成
mov         dword ptr [p],eax         ;结果送P


这样的用法还是尽量少用。

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2010-09-05 14:01
快速回复:请教个关于++i问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019922 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved