设整形变量a、b的值均为8,printf(”%d,%d",(a++,++b),b--);的输出结果是多少? 我需要详细的解释,谢

[复制链接]
查看11 | 回复5 | 2010-11-11 20:02:23 | 显示全部楼层 |阅读模式
结果是 9,8 ;因为 先计算b--,然后再执行(a++,++b),括号里面等价于 ++b;在计算b-- 的时候,是先将b 赋值到括号里面在计算++的。如果变成printf(”%d,%d",(a++,++b),--b)结果就为 8,7因为是先将b减1 然后再送到括号里面去的。
回复

使用道具 举报

千问 | 2010-11-11 20:02:23 | 显示全部楼层
输出结果为:8,8原因:编译系统是从右到左进行求值,所以先算b--,值为:8,然后再计算逗号表达式(a++,++b)由于逗号表达式的值为最右边表达式的值,所以++b的值就是逗号表达式的值,由于先算的b--,所以此时++b也为8。
回复

使用道具 举报

千问 | 2010-11-11 20:02:23 | 显示全部楼层
以上两位都是错的。首先程序要先把(a++,++b),b--这部分的结果全算出来,才会打印结果,a++,所以a = 9,++b,b=9,但是后面b--又把b变成8了,根据逗号运算符,第一个%d取的是(a++,++b)里的后面那个数b的值,所以是8,第二个%d也是b的值,所以也是8,所以打印“8,8”
回复

使用道具 举报

千问 | 2010-11-11 20:02:23 | 显示全部楼层
9,8自增自减是从左往右进行运算
回复

使用道具 举报

千问 | 2010-11-11 20:02:23 | 显示全部楼层
LS真的编译得出来么?反正我用dev和vc都通过不了……%d接收的是一个数值,但是(a++,++b)塞给它一组数,我很怀疑这个编译机制。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行