逗号表达式与自增自减
自增自减
b = a++ 等价于 b = a; a = a+1;
b = ++a 等价于 a= a+1; b = a;
逗号表达式
一般形式:e1,e2,e3,.....,en
逗号是一个多目运算符,且优先级最低,而且是左结合,又称为顺序求值运算符,依次运算e1,e2.....,en
整个逗号表达式的值为最后一个en的值
-
逗号表达式与函数中参数的区别:
printf("d%, d%, d%", a, b, c); // 三个值从右往左运算 printf("d%",( a, b, c)); // 三个值从右往左运算
eg:
int sum = num = 7;
sum = ++num, ++num;
上式最终num = 9 sum = 8,因为赋值运算符的优先级高于逗号表达式,所以第一个++num运算完后,就赋值给了sum。
改成如下,则sum的值为9:
int sum = num = 7;
sum = (++num, ++num);
注意: 遇到计算结果与预期明显不符的情况,可以先检查是否优先级理解错误,通常都是优先级搞错。
常引起问题的有逗号运算符与赋值运算符、&作为取址运算符和&作为位运算符的两种情况