C语言中的逗号运算符

    考研结束以后,在玩了几天hadoop以及hbase,被整得昏天暗地的。便看看ACM来放松放松心情,在网上有个一问一答平台,做了一到简单的不能再简单的C语言基础题,悲剧的是我做错了,一开始还不敢相信,在查阅了相关资料后,才发现自己这块知识都丢了,做不出来还真是不丢人。

  直接贴代码:

void main()

{

int a=10, b=20, c=30;

printf("%d %d %d\n", a+b+c, b=(c*2), c=(c+b));

}

   我的第一感觉是在printf输出中只能包含简单表达式,不能包含赋值表达式,所以选择了不能编译通过;再后来发现即使可以通过编译,我还是错的,因为我的答案是60 60 90;很不幸,最终的答案是160 100 50 。

   这其中涉及的便是C语言中的逗号运算符,查阅了机械工业出版社的《The C Programming Language》中文版,是这样说到的:由逗号分隔的两个表达式的求值次序为从左到右,并且左表达式的值被丢弃。右操作数的类型和值就是结果的类型和值。在开始计算右操作数以前,将完成左操作数涉及到的副作用的计算。在逗号有特别含义的上下文中,如在函数参数表和初值列表中,需要使用赋值表达式作为语法单元,这样,逗号运算符仅出现在圆括号中。例如,下列函数调用:f(a, (t=3, t+2), c) 包含3个参数,其中第二个参数的值为5。 

  如果按照这样的解释,“”是用作逗号表达式的则运算从左到右,那么结果就是我得出的不幸的那个结论。所以,在此处,逗号应该起分隔符的作用,并且规则是按从右到左的顺序来执行。为了验证,我用了以下测试:

 void main()

{

int a=10, b=20, c=30;

printf("%d %d %d", a=b+10, b=c+10, c=50);

}

运算结果是70 60 50.

 

你可能感兴趣的:(C语言,逗号)