| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 965 人关注过本帖
标题:关于printf的较难问题
只看楼主 加入收藏
kavin8000
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-3-16
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:10 
关于printf的较难问题
那位高手能解释一下下面的这个程序:
#include <stdio.h>
void main()
{
    int x=2;
    printf("输出++%d的结果是%d\n",x,++x);
    printf("输出--%d的结果是%d\n",x,--x);
    printf("输出%d++的结果是%d\n",x,x++);
    printf("输出%d--的结果是%d\n",x,x--);
}
搜索更多相关主题的帖子: printf 
2010-03-16 12:54
sanshengmeng
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-3-16
收藏
得分:0 
输出++2的结果是3
输出--3的结果是2
输出2++的结果是2
输出3--的结果是3
2010-03-16 13:04
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:1 
i++ 先取i的值,i再自加
++i i先自加,再取i的值  

i = 10;
printf("i,i++,i++ = %d,%d,%d\n",i,i++,i++);这个对于不同的编译器会有不同的结果,gcc计算的顺序是从右至左,++i 与i单独取值时,是所有运算结束后i的值,当++i与i和别的式子一起运算时,它们是该次运算后的最终值,所以gcc的值会是 12,11,10,而vc没有怎么研究,可能是同时计算的吧,所以为10,10,10,但把最后一个i++改为++i就变成11,11,11了,它的计算 顺序也应该是从右至左,可能是根据前加后加取数据给下一个式用的吧,具体自己研究研究;

根所以上原理,可以自己推一下
2010-03-16 13:09
ltyjyufo
Rank: 9Rank: 9Rank: 9
来 自:未来
等 级:蜘蛛侠
威 望:2
帖 子:353
专家分:1166
注 册:2009-10-25
收藏
得分:0 
以下是引用sanshengmeng在2010-3-16 13:04:32的发言:

输出++2的结果是3
输出--3的结果是2
输出2++的结果是2
输出3--的结果是3
  同意2楼的结果,关键就是要认清那个“++”是在变量的前面还是后面,在前面就先加,在后面就后加。

翱翔天空的雄鹰固然令人羡慕,却容易被禁锢于牢笼之中,只有那夜色中的蝙蝠才是真正自由的飞翔者....
2010-03-16 13:19
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:1 
gcc是:
输出++3的结果是3
输出--2的结果是2
输出3++的结果是2
输出2--的结果是3
vc是:
输出++3的结果是3
输出--2的结果是2
输出2++的结果是2
输出3--的结果是3
2010-03-16 13:38
mhjerry
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2010-3-15
收藏
得分:0 
楼主是在准备二级吧~
2010-03-16 14:18
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:0 
以下是引用ldg628在2010-3-16 13:38:48的发言:

gcc是:
输出++3的结果是3
输出--2的结果是2
输出3++的结果是2
输出2--的结果是3
vc是:
输出++3的结果是3
输出--2的结果是2
输出2++的结果是2
输出3--的结果是3
准确地说这个VC的结果说的是VC Debug版本

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-03-16 14:49
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:0 
回复 7楼 forever74
嗯, 学习了,我没试过vc的release,结果还真是与debug不同,vc的release运行结果与gcc的一样
2010-03-16 15:12
独孤求败1989
Rank: 2
等 级:论坛游民
帖 子:41
专家分:36
注 册:2009-11-8
收藏
得分:0 
呵呵 看来你再准备二级c,我也是啊……不是很难……把课本看好啊……
2010-03-16 16:29
树上月
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:114
专家分:154
注 册:2010-1-6
收藏
得分:8 
#include <stdio.h>
void main()
{
    int x=2;
    printf("输出++%d的结果是%d\n",x,++x);  先i+1作为i的值,再把i+1当做i的值;所以等于3
    printf("输出--%d的结果是%d\n",x,--x);  先将i=3作为i的值,在用i-1当做i的值
    printf("输出%d++的结果是%d\n",x,x++);
    printf("输出%d--的结果是%d\n",x,x--);  同上。。。
}

区分++n和n++
++n:先执行n=n+1,再将n的值作为表达式++n的值;
n++:先将n的值作为表达式n++的值,再执行n=n+1

给一个更难的题目给你做,如果你把这个题目做出来了。这类问题就解决了
#include <stdio.h>
main()
{
    int a=5,b,c,i=10;
    b=a++;
    c=++b;

    printf("a = %d, b = %d, c = %d\n",a,b,c);
    printf("i,i++,i++ = %d,%d,%d\n",i,i++,i++);
    printf("%d\n",++i);
    printf("%d\n",--i);
    printf("%d\n",i++);
    printf("%d\n",i--);
    printf("%d\n",-i++);
    printf("%d\n",-i--);
    getchar();
}

每一个不曾起舞的日子,都是对未来的一种辜负......
2010-03-16 22:35
快速回复:关于printf的较难问题
数据加载中...
 
   



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

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