逗号运算符并不局限于在for循环中使用,但是这是它最常用的地方。逗号运算符有两个其他性质。首先,它保证了被它分隔的表达式从左往右求值(换言之,逗号是一个序列点,所以逗号左侧项的所有副作用都在程序执行逗号右侧项之前发生)。因此,ounces在cost之前被初始化。在该例中,顺序并不重要,但是如果cost的表达式中包含了cost时,顺序就很重要。例如,假设有下面的表达式:
ounces++, cost = ounces * FIRST_OZ
在该表达式中,先递增ounces, 然后在第2个表达式中使用ounces新值。
作为序列点的逗号保证了左侧子表达式的副作用在对右侧子表达式求值之前发生。
记住,任何表达式后面加上一个分号就成了表达式语句。
另外,下面的语句
houseprice = (249,500);
赋给houseprice的值是逗号右侧子表达式的值,即500。
逗号也可用作分隔符。在下面语句中的逗号都是分隔符,不是逗号运算符:
char ch, date;
printf("%d %d
", chimps, chumps);
赋值运算符:
下面的运算符用右侧的值,根据指定的操作更新左侧的变量:
+= 把右侧的值加到左侧的变量上
-= 从左侧的变量中减去右侧的值
*= 把左侧的变量乘以右侧的值
/= 把左侧的变量除以右侧的值
%= 左侧变量除以右侧值得到的余数
示例:
rabbits *= 1.6;与rabbits = rabbits * 1.6;相同
这些组合赋值运算符与普通赋值运算符的优先级相同,都比算术运算符优先级低。
因此,
contents *= old_rate + 1.2;
最终的效果与下面的语句相同:
contents = contents * (old_rate + 1.2);
逗号运算符:
逗号运算符把两个表达式连接成一个表达式,并保证最左边的表达式最先求值。逗号运算符通常在for循环头的表达式中包含更多信息。整个逗号表达式的值是逗号右侧表达式的值。
示例:
for (step = 2, fargo = 0; fargo < 1000; step *= 2)
fargo += step;