| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 420 人关注过本帖
标题:关于i++ ++i
只看楼主 加入收藏
ybyc9999
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2015-1-24
结帖率:90%
收藏
已结贴  问题点数:5 回复次数:3 
关于i++ ++i
#include "stdio.h"
#include <iostream>
int main(void)
{
    int i=5,j=5,p,q;
    p=(i++)+(i++)+(i++);
    q=(++j)+(++j)+(++j);
    printf("i=%d,j=%d,p=%d,q=%d\n",i,j,p,q);
    system("pause");
    return 0;
}
程序输出结果是:i=8.j=8,p=15,q=22
不是太理解,请大家帮忙看看,特别是最后的q


[ 本帖最后由 ybyc9999 于 2015-1-31 14:21 编辑 ]
搜索更多相关主题的帖子: include system return 
2015-01-31 13:41
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:5 
是有点不可思议,开始我认为是括号运算符引起的,但后面还有一个括号,值不应该还要多一个吗?后我自己做了个例子,仔细看了汇编后的代码,我觉得是编译器引起的,不知道是不是bug
#include "stdio.h"
int main(void)
{
    int i=0,q=0;
    q=++i+(++i)+(++i);
    return 0;
}

5:        int i=0,q=0;
00401268   mov         dword ptr [ebp-4],0
0040126F   mov         dword ptr [ebp-8],0
6:        q=++i+(++i)+(++i);
00401276   mov         eax,dword ptr [ebp-4]
00401279   add         eax,1
0040127C   mov         dword ptr [ebp-4],eax  ++i一次i=1
0040127F   mov         ecx,dword ptr [ebp-4]
00401282   add         ecx,1                  正常的++i的操作是送到eax中,但这个却送到ecx
00401285   mov         dword ptr [ebp-4],ecx  ++i两次i=2,先做括号的原因
00401288   mov         edx,dword ptr [ebp-4]
0040128B   add         edx,dword ptr [ebp-4]  ++i+(++i)=2+2=4-->edx,这里已经出现了不可理解的数,中间结果没有另外开辟空间存储。
0040128E   mov         eax,dword ptr [ebp-4]
00401291   add         eax,1                  
00401294   mov         dword ptr [ebp-4],eax  ++i三次i=3
00401297   add         edx,dword ptr [ebp-4]  i+edx=3+4=7
0040129A   mov         dword ptr [ebp-8],edx  q=7
7:        return 0;

能编个毛线衣吗?
2015-01-31 15:07
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
应该是编译器的问题,如下代码q=6,
    int i=0,j=0,q=0;
    q=j+(++i)+(++i)+(++i);
如果代码如下,q却等于7了,仅第一次等号后是(++i)+(++i)就与分析结果不一致。
    int i=0,j=0,q=0;
    q=(++i)+(++i)+(++i);



[ 本帖最后由 wmf2014 于 2015-1-31 15:40 编辑 ]

能编个毛线衣吗?
2015-01-31 15:26
ybyc9999
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2015-1-24
收藏
得分:0 
回复 3楼 wmf2014
他们有的是输出的24,可能是和编译器有关吧
2015-01-31 17:32
快速回复:关于i++ ++i
数据加载中...
 
   



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

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