一道关于C语言中函数的问题

来源:百度知道 编辑:UC知道 时间:2024/09/28 10:23:30
int x=10;
int y=x++;
printf("%d,%d",(x++,y),y++);
这段程序的输出结果是多少?要有详细的解答过程!
但是答案是11,10 这是为什么啊

我思路清晰了
printf("%d,%d",(x++,y),y++);
这里面有一个是逗号表达式
它的算法
比如有x=1,y=2,z=3
它是先把1赋给x,再把2赋给y,接着把3赋给z,
然后输出的是z
同理,(x++,y)最后输出的是y
先算x++,之后x的值变为11
接着算y,又因为y=x++ 所以y=11,输出11

跟着有y++
这个不在逗号表达式内,需要首部定义的来算
y++取y的值,y=x++ x=10
所以y=10 输出结果

最终结果为11 10

输出结果为:10,10

int x=10;
int y=x++;//对于x++来说,是先将原先的x值代入计算表达式的值,再进行++处理,所以,这里y等于0,赋值处理后x等于11

printf("%d,%d",(x++,y),y++);
对于这个语句,涉及了逗号表达式的一个特点:
对于逗号表达式,它是从左向右计算的,并且将其最右值作为逗号表达式的值。
也就是说:(表达式1,表达式2)
逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。

所以,结合上面的特性:
printf("%d,%d",(x++,y),y++)中,
先计算(x++,y),再计算y++:
(x++,y):先计算x++,再计算y,经过之前的赋值处理后,y的值为10,所以整个(x++,y)的值就是y的值,也即是10
y++:由于y的值为10,所以y++这个表达式的值为10,y再进行++处理变为11

所以输出的是: 10,10