有这样一道c语言:
#include"studio.h"
main()
{int x=10,a=3;
printf("%d,,%d,%d\n",x--,x--,x--);
printf("%d,%d,%d,%d\n",a++,++a,a--,--a);
}
我运行后,得到的结果是:
10,10,10
3,3,2,2
我记得当时,老师说要用右结合的。应该是
8,9,10
3,2,1,2
我迷糊了,谁能帮我分析一下呀!! 在此,感谢他一下。。。
有这样一道c语言:
#include"studio.h"
main()
{int x=10,a=3;
printf("%d,,%d,%d\n",x--,x--,x--);
printf("%d,%d,%d,%d\n",a++,++a,a--,--a);
}
我运行后,得到的结果是:
10,10,10
3,3,2,2
我记得当时,老师说要用右结合的。应该是
8,9,10
3,2,1,2
我迷糊了,谁能帮我分析一下呀!! 在此,感谢他一下。。。
你确定这是你们老师给的例子给你?
你可以去抽你们老师两巴掌,用这样的例子来误人子弟。
C的函数参数的压栈顺序一般是固定的,从右向左, 不过WINDOWS环境下可以通过指定pascal关键字来要求从左向右压栈。函数参数关于顺序方面的内容就这么多了。
而关于C函数参数的求值顺序,C是没有定义的,取决于编译器。相同编译器在不同CPU上也可能不同。所以你这个根本就没法确定求值顺序。正确的写法是在函数调用前先行计算并保存到变量作为参数传递。