C语言学得好的朋友帮下忙!以下程序执行的结果是什么?

#include<stdio.h>
main()
{
int x=10;
int y=x++;
printf("%d,%d",(x++,y),y++);
}

老师讲解时说printf函数自右向左执行,逗号表达式以最后一个表达式的值为其值。程序执行后输出11,10.
可是我编译后输出结果是10,10.请问正确结果到底是怎样的?另外关于逗号表达式的相关知识能不能给我详解和举例下?谢谢啊!

你的运行结果是正确地 #include<stdio.h>
main()
{
int x=10;
int y=x++; /*x先赋值给y再自增,执行这句之后y=10,x=11*/
printf("%d,%d",(x++,y),y++); /*(x++,y)逗号表达式是最后一个表达式即y的值,y=10,y++先输出10,之后y才变为11/
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-17
#include<stdio.h>
main()
{
int x=10;
int y=x++; //这里x先赋值给y再自增的,执行这句之后y=10,x=11
printf("%d,%d",(x++,y),y++); //(x++,y)逗号表达式是左边的值,所以这个表达式为y的值即10, y++先打印再自增,所以都为10
}本回答被网友采纳
第2个回答  2013-03-17
第一个x++的意思是先返回x值再x自加一,所以y得到初始化值为10,输出语句第一个输出数据为(x++,y),而逗号表达式的返回值为最后一个数值,所以返回y输出10,第二个输出数据为y++,跟上面同理,先返回10再y自加一
希望楼主采纳
第3个回答  2013-03-19
c语言提供一种特殊的运算符,逗号运算符,优先级别最低,它将两式联接起来,如:(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,如:(3+5,6+8)的值是14。(a=3*5,a*4)的值是60。逗号表达式的形式如下:表达式1,表达式2,表达式3,...... ,表达式n逗号表达式的要领:(1) 逗号表达式的运算过程为:从左往右逐个计算表达式。(2) 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。(3) 逗号运算符的优先级别在所有运算符中最低。int x=10;
int y=x++;
//此时 y =10 , x=11; x++ 是先赋值 后自加
printf("%d,%d",(x++,y),y++);
// (x++,y) 表达式的值是 y 的值,也就是 10 ,后一个当然是 y++ ,先赋值后自加,也是 10

参考资料:http://baike.baidu.com/view/2393109.htm

本回答被提问者采纳
第4个回答  2013-03-17
int y=x++;后x=11,y=10
printf("%d,%d",(x++,y),y++);中(x++,y)输出的是为y值为10,y++输出的也为10然后y才自加,
逗号表达式的结果就是最后一个表达式的值,前面略过的一般用于赋值,最可能的结果就是你老师讲错了,要不就是程序输错了追问

那printf函数计算其中表达式时是不是自右向左执行呢?老师讲解时强调了这一点。如果是自右向左,那么运行printf("%d,%d",(x++,y),y++);语句时,首先执行y++,y值变为11,则(x++,y)的值也就是11了啊。这样的话,最终输出的不就是10,11了么?

相似回答