C语言单条语句执行顺序问题

[复制链接]
查看11 | 回复2 | 2016-4-26 18:29:29 | 显示全部楼层 |阅读模式
int a=1;
printf("%d %d", a++,++a);
printf(" %d\n",a); //结果2 2 3
---------
printf(%d %d", ++a.a++);
printf("%d %d",a); //结果3 1 3
为什么会得到这个结果?
printf(%d %d", ++a.a++);
printf(" %d\n",a); //结果3 1 3

回复

使用道具 举报

千问 | 2016-4-26 18:29:29 | 显示全部楼层
这个涉及到函数的调用约定运行结果跟编译器有一定的关系,不同的编译器参数的入栈的顺序不同一般的编译器是从右到左如fun(a,b)这个函数调用,是先计算参数b,入栈,再计算参数a,入栈printf("%d %d", a++,++a);//先计算++a,先自增,a的值变为2,将2入栈 再来计算a++,将a的值2入栈,再使a自增,a的值变为3printf(" %d\n",a); //a的值已经变为3了printf(%d %d", ++a.a++);//先计算a++,将a的值1入栈,再使a自增,a的值变为2,再来计算++a,先自增,a的值为3,将3入栈,输出3 1printf(" %d\n",a); //输出3
回复

使用道具 举报

千问 | 2016-4-26 18:29:29 | 显示全部楼层
1、这个涉及到函数的调用约定运行结果跟编译器有一定的关系,不同的编译器参数的入栈的顺序不同一般的编译器是从右到左如fun(a,b)这个函数调用,是先计算参数b,入栈,再计算参数a,入栈2、printf("%d %d", a++,++a);//先计算++a,先自增,a的值变为2,将2入栈 再来计算a++,将a的值2入栈,再使a自增,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行