| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1684 人关注过本帖
标题:小程序` 不明白
只看楼主 加入收藏
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
2个程序应该完全一样,如果不一样那可能是编译器对代码优化上处理的不好。(关掉优化)

—>〉Sun〈<—
2007-11-25 09:40
zglcx123
Rank: 2
等 级:论坛游民
帖 子:60
专家分:10
注 册:2007-7-2
收藏
得分:0 
++a  是先自加
a++  是后自加,,
单独用是一样的。
  如:
b = a++;//是先把a的植传给 b ,才自加一
b = ++a;//是先自加一,,才传给b,,,,
是不一样的,
如果先 a = 3;...则  第一个b = 3,,第二个b = 4;
2007-11-25 10:03
C语言的深度
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:卡特的怀抱
等 级:版主
威 望:1
帖 子:9577
专家分:19
注 册:2007-10-22
收藏
得分:0 
10L的
你要理解a++和++a的概念~~!两个性质是不一样的
4楼解释的很好`

用代码打出楼房...用编程编出幸福...
2007-11-25 10:05
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
你们这些人都没看轻楼主的代码吗!

楼主的代码 a++;  和 ++a; 是单独的语句。

所以结果应该是一样的,如果不一样那就可能能编译器优化出了的问题。

—>〉Sun〈<—
2007-11-25 10:15
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
printf("%d", ++a);  与 printf("%d", a++);  才不一样。

—>〉Sun〈<—
2007-11-25 10:16
arrogone
Rank: 1
来 自:uestc
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-11-25
收藏
得分:0 
回复 4# 的帖子
是的,自加存在一个进入CPU加法运算器先后的顺序,a++,和++a 进入的时间不一样
2007-11-25 10:17
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
printf("%d", ++a);  与 printf("%d", a++);  才不一样。

/*****************/
a++;
printf("%d\n", a);



++a;
printf("%d\n", a);

结果应该是一样的。

a++ 与 ++a 是一个单独的语句,那么不过下加还是后加,到了下一条语句a的值都是 + 1。


/*  帖子不能编辑,所以发了N贴   */

—>〉Sun〈<—
2007-11-25 10:20
wubizao
Rank: 1
来 自:荆州长大电信
等 级:新手上路
帖 子:223
专家分:0
注 册:2006-6-24
收藏
得分:0 
对于第一次a=0,当然运行到下一行时,也就是printf("%d\n",a);然后
a=a+1;此时a=1;
对4楼的最不理解之处就在于上面这句话?!
在这个程序中a++;
                     ++a;
都是单独成语句的
所以这个单独语句执行后,a都被加了1,并不是上面那句“也就是printf("%d\n",a);然后a=a+1;此时a=1;”
困惑中。。。。。。

在路上走,看见了C,从此爱上了她
2007-11-25 10:32
but
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2007-10-27
收藏
得分:0 
你要是在printf("%d\n",a++);就是先输出A的值在执行A+=1;要是++A就是先执行A+=1;在输出值,但是要是不在输出语句中就想楼主那样,他们的结构都是要让A自加之后在输出结构。

2007-11-25 10:44
wubizao
Rank: 1
来 自:荆州长大电信
等 级:新手上路
帖 子:223
专家分:0
注 册:2006-6-24
收藏
得分:0 
7:        i++;
00401036   mov         eax,dword ptr [ebp-4]
00401039   add         eax,1
0040103C   mov         dword ptr [ebp-4],eax
8:        ++j;
0040103F   mov         ecx,dword ptr [ebp-8]
00401042   add         ecx,1
00401045   mov         dword ptr [ebp-8],ecx
i++;
++j;
单独成句,在反汇编中指令的循序是一样的
先是mov 寄存器,内存区
再是add 寄存器,1
然后mob 内存区,寄存器
......

在路上走,看见了C,从此爱上了她
2007-11-25 10:50
快速回复:小程序` 不明白
数据加载中...
 
   



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

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