注册 登录
编程论坛 新人交流区

初学者疑问~花你几分钟时间

mtchenjun 发布于 2007-10-11 23:44, 461 次点击
你们好,我是一名初学者,请教两个让你们笑掉大牙的小程序.可是我很不明白这其中的原因
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)1,2,1. (2)1,1,1.可我用编译器如实写下程序查看结果却为:(1)1,1,1. (2)1,0,1.
由其是第二题,怎么也想不明白结果中会有0这个答案.请各位老手可以给我一个详尽的解讲.在此非常感谢.
7 回复
#2
け澔けゑ楓ぁ2007-10-14 16:39

你搞错地方了咧,这是C#讨人论坛啊,那里面的回答可能比这里的回答更专业些咧!

#3
tdzdtdzd2007-10-14 17:26
不可能哟
#4
jameshui2007-10-14 20:21
更晕
#5
godlw2007-10-14 23:54
晕呼呼
#6
NS20072007-10-15 00:35

main()
{
int n=1;
printf( "%d %d %d\n" ,n ,++n, n--);
}
这个好像编译器的执行顺序不一样。三个全是1的结果似乎是先执行了n--,在执行的++n。

#7
鸿工作室2007-10-15 01:00
执行顺序,从右到左
#8
NS20072007-10-15 01:05

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--);
}
哈,我想明白了,这道题目告诉我们一件事,就是在printf()函数中,整个输出过程是要全部执行完才输出。
例如第一题,n=1时,先执行++n,则n=2,最后执行n--,则n=1,直到此时才开始执行输出,所以n全是1。

第二题,先执行n++,此时n++仍然是1,再n--,则n=1,而内存中的n++指的是0,n--是先输出在自减,所以也是1。

1