| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1338 人关注过本帖
标题:新人问题~~花你几分钟
只看楼主 加入收藏
wangchun_an
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-10-16
收藏
得分:0 
回复:(mtchenjun)新人问题~~花你几分钟

1.main()
{
int n=1;
printf( "%d %d %d\n" ,n ,++n, n--);
}

2.main()
{
int n=1;
printf( "%d %d %d\n" ,n ,n++, n--);
}

1.printf 是从后往前执行的,先说n--,输出n=1后,n自减1,此时n=0
再说++n,先让n自加1,使n=1,输出
最后这个n就不用说了,上一步时n=1,此时直接输出


2.此题比上题就第二步不同,在n=0后,先输出这个0,然后再给他做自加,这时n又等于1了

[此贴子已经被作者于2007-10-16 16:29:05编辑过]


2007-10-16 16:28
nghf
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-10-16
收藏
得分:0 
受教了,我还一直认为是从前向后执行的.寒一个

毕业后我真的失业了.....后来又就业了!!
2007-10-16 17:14
sagittor
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-10-16
收藏
得分:0 
回复:(mtchenjun)新人问题~~花你几分钟
请检查逻辑
2007-10-16 17:45
tml0027
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-10-16
收藏
得分:0 
回复:(mtchenjun)新人问题~~花你几分钟

我是新人,只看不说话!

2007-10-16 17:52
koman
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2007-9-12
收藏
得分:0 
以下是引用wangchun_an在2007-10-16 16:28:34的发言:

1.main()
{
int n=1;
printf( "%d %d %d\n" ,n ,++n, n--);
}

2.main()
{
int n=1;
printf( "%d %d %d\n" ,n ,n++, n--);
}

1.printf 是从后往前执行的,先说n--,输出n=1后,n自减1,此时n=0 再说++n,先让n自加1,使n=1,输出
最后这个n就不用说了,上一步时n=1,此时直接输出


2.此题比上题就第二步不同,在n=0后,先输出这个0,然后再给他做自加,这时n又等于1了 //我在vc++中测试感觉是n--,输出n就不再计算n--了 ,只有自增(减)操作符在n前面的时候才会改变n的值;可能与编译器有关的,至少vc下第一题是自后运算
n-- 直接打印n;--忽略 //1
++n 先加1再打印,n的值改变为2;//2
n 直接打印n; //2
打印结果为2 2 1;
第2题
n-- 直接打印n; //1
n++ 还是直接打印n;//1
n  继续打印n;//1
输出结果 1 1 1;
//要是是这种情况?:
void main()
{
a=1;
printf("%d,%d,%d\n",a,++a,a--);
printf("%d,%d,%d\n",a,a++,a--);
}
输出结果还是 221
111
因为printf()是一个函数,a为传的值过去,他不能改变main函数里a的值,只能改变printf();这个语句里的a的值,其实printf()里的a应该不等同于main函数里的a了,至少不应该是同一个内存地址;//我的理解是不是错误的!高手指点!


[此贴子已经被作者于2007-10-16 21:56:49编辑过]

2007-10-16 21:49
yuwei5000
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-10-16
收藏
得分:0 
我运行是1 2 2    1 1 2
2007-10-16 22:08
yuwei5000
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-10-16
收藏
得分:0 
这么解释~~~首先那个 n 输出 1

接着那个 ++n 是先 +1 , ++n 就变成 2
那个 --n 是后减 ,所以输出的还是 2
结果就是 1 2 2
后面那个一样

先是n 为 1
接着是 n++ 后加 所以还是 1
而那个n-- 就是因为前面一个已经 +1 了,而还没 -1 所以是 2
2007-10-16 22:21
w15824930672
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-10-16
收藏
得分:0 

有的系统中,在调用函数时,实参数的求值顺序是自左而右的,而有的则是自右而左的。

上面的结果可以这样求出:
一:printf( "%d %d %d\n" ,n ,++n, n--);
先执行n--,输出n=1,之后n=0;++n先加(n=1)后取值n=1;最后:n=1;
二:printf( "%d %d %d\n" ,n ,n++, n--);
先执行n--,输出n=1,之后n=0;n++先取值n=0后加(n=1);最后:n=1;

之所以有不同的结果是因为不同的系统它的求值顺序是不同的,最好先试一下你自己机器的执行次序方便以后编程!

2007-10-16 22:44
无敌小欣
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-10-16
收藏
得分:0 
按19楼的理解了。..

天啊。.你们一会1一会2的.. 糊涂了 不知道该听谁的

ˇ〓ˇAnyone can hurt someone they love。° O
2007-10-16 22:44
lxmhero
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-10-16
收藏
得分:0 
飘过。。。
2007-10-16 23:03
快速回复:新人问题~~花你几分钟
数据加载中...
 
   



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

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