c语言····求下面程序运行结果

main()
{
int n=1;
n++;
printf("%d %d %d",n,n++,--n);
}
为啥我的microsoft visual studio 2010 输出的是
2 1 2

编译器的不同将会直接影响到你的运行结果,ANSI 中规定编译器的编写要遵守一些约定,但是各个厂家在编写编译器的时候对一些求值顺序、表达式理解、参数传递顺序等等有不同的处理方式,因为C标准中并没有要求这些地方必须怎么做。
所以,你对于自增、自减类的表达式结果,看到的书上一个样,你自己试验的时候是另一结果,但是,如果你用 的编程环境和书上用的是一样的,那么你的结果就该和书上是一样的了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-22
答:VC++6.0运行结果是 1 1 1
此处,根据参数传递的约定,自右向左传参数。首先:n是2,所以最右边的--n是1,(因为--在左,所以先减)接着n++,这个还是1,然后左边的n 也是1,最后 n再自增一次。
若是这个:
main()
{
int n=1;
n++;
printf("%d %d %d",--n,n++,n);
}
则是 1 2 2 因为先右后左,所以最右边是2,中间还是2,左边是1,(先减再打印) ,最后n再加一。n最后是2.追问

那也就是说,考试时我要填2 2 2咯(按我那个程序)
随便再请教一下,c的结构体和链表流程图怎么画?就是刚开始定义结构体的那部分画到哪?

追答

按你那个要写 1 1 1.

你说的 定义结构体跟流程图没关系。全局的变量,则在主函数前,局部的则在执行到那个函数才出现。程序流程次序是:全局变量->主函数。主函数内部根据各个子函数执行次序画流程。(结构体、链表当然也有局部的和全局的之分)

追问

我问了同学,答案好像是楼下兄弟(还有我)认为的2 2 2

追答

不同的编译器 ,约定是不一样的。VC++6.0的结果是1 1 1.

本回答被提问者采纳
第2个回答  2011-12-22
我也试了一下。vs2010的结果的确是2 1 2.而正如楼上所说,在dev-cpp环境下是2 1 1.我的第一反应也应该是2 1 1,因为在调用printf函数的时候,参数按照 n,n++,--n的顺序压栈,所以出栈的顺序应该是--n,n++,n。所以,最后一个--n输出1,n++仍然输出1,n再加1变成2,所以最后的一个n是输出2.因此输出结果应该为2 1 1.但VS2010的结果是2 1 2,我也不知道为什么会这样。可能真的和运行环境有关吧。追问

····汗···我还是个新手,什么出栈、压栈的不懂啊··
不过,谢谢你的回答

追答

如果是笔试这种题目的话,按照理论上的,就填2 2 2吧。

第3个回答  2011-12-22
运算过程可能取决于编译器。我在dev-cpp环境下答案是2 1 1。最好不要这样写,避免混乱!追问

那如果不管编译器,输出结果是
2 2 2
吗?

相似回答