输出问题

qi890402 2008-02-16 10:48:56
#include "stdio.h"
main()
{
int x=1;
printf("%d,%d,%d\n",++x,x,x++);

}

哪位高手可以解释一下为什么输出是3,2,1为什么不是2,1,1
...全文
55 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
drizztguai 2008-02-17
  • 打赏
  • 举报
回复
大虾们都教育我们说 不要在这上面下工夫。 这都是玩具代码. 都是要避免使用的.
luckyTheOne 2008-02-17
  • 打赏
  • 举报
回复
1.命令提示符,当前目录下
cl /Fa file_name.c
看file_name.a就知道了
以下是引用NaiNaiGeXiong :
2、不能保证所有的C编译器都是先求完x++这个表达式后才求x这个表达式进而最后求++x这个表达式,编译器完全可能不按照从右到左的顺序求这三个表达式的值,但如果是C调用方式,编译器是从右到左把实参压入堆栈的,但入栈顺序不等于求参数的顺序。
3.vc默认情况下是__cdecl调用约定
4.如有错误,多谢指教
qi890402 2008-02-17
  • 打赏
  • 举报
回复
还是不太明白,能详细一点吗
hongwu147 2008-02-17
  • 打赏
  • 举报
回复
printf语句,从右向左执行,x初始化为一,x++后,返回1,x=2;++x后,返回3,x=4.
注意x++是先引用x,再对x加一,++x是先对x加一,再引用!
NaiNaiGeXiong 2008-02-17
  • 打赏
  • 举报
回复
1、楼主要再对表达式有所认识;
2、不能保证所有的C编译器都是先求完x++这个表达式后才求x这个表达式进而最后求++x这个表达式,编译器完全可能不按照从右到左的顺序求这三个表达式的值,但如果是C调用方式,编译器是从右到左把实参压入堆栈的,但入栈顺序不等于求参数的顺序。
3、这种是错误的写法。
coychou 2008-02-16
  • 打赏
  • 举报
回复
函数实参赋值给形参的右结合性。

70,035

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧