一、问题
对于表达式 c=a,b;和 d=(a,b);该如何进⾏理解?它们的值都是怎样的?
二、解答
在C语⾔中,逗号有两个作⽤,⼀是⽤来分隔函数参数,⼆是作为逗号运算符。本题主要考虑的是逗号运算符,根据逗号运算符的规则,将最后表达式的值作为逗号表达式的值。
#include<stdio.h>
int main()
{
int a, b, c, d;
a = 3;
b = 5;
c = a, b;
d = (a, b);
printf("c = %d\n", c);
printf("d = %d\n", d);
return 0;
}
有些人会认为c的值应为5,但答案却是错误的。这是什么原因呢?在C语⾔中逗号运算符的优先级最低,应被最后考虑。
这⾥,表达式 c=a,b;是⼀个逗号表达式,其中包括⼀个赋值表达式,先进⾏赋值运算的值是 3⽽不是5,但整个逗号表达式的值是b(即5)。这也往往是许多⼈忽略的地⽅所在,应尽量避免此种情况的发⽣。表达式 d=(a,b);是⼀个赋值表达式,将⼀个逗号表达式的值赋给 d,故d的值为b(即5)。
三、总结
对于表达式,既要考虑运算符的特点,也要考虑运算符之间的优先级顺序。