5.6.2 逗号表达式
逗号表达式的一般格式如下。
表达式1,表达式2,表达式3, ...,表达式n
例如下面就是一个逗号表达式。
a=2*6, a-4, a+15;
当逗号作为运算符使用时是一个双目运算符,其运算优先级是所有运算符中最低的。逗号运算符的运算顺序是从左向右的,因此上述赋值语句的求值顺序为:先计算2*6并赋值给a(结果是a=12),再计算a-4(只计算,不赋值),最后计算a+15(只计算,不赋值),最终以27作为整个逗号表达式的值。但是需要注意的是,后面两个表达式仅计算,而并没有赋值给a,所以a的值仍然为12。
有时候使用逗号表达式的目的仅是得到各个表达式的值,而并非要得到整个逗号表达式的值。看下面的代码。
t=a, a=b, b=t;
上述逗号表达式的目的是互换变量a、b的值,而不是使用整个表达式的值。
再看下面的代码。
int j=5; a=(a=j+1, a+2, a+3);
上述赋值语句的执行顺序为:先对变量a赋值6,再计算a+2得8,再计算a+3得9,最后将9作为整个逗号表达式的值赋值给变量a,使a重新赋值为9。如果将一对括号去掉,那么a的值为6。
再看下面的代码。
int x , y; y=(x=1, ++x, x+2);
上述赋值语句的执行顺序为:x赋值为1, x自增1得2,再计算x+2得4,4作为整个逗号表达式的值赋值给变量y,因此y赋值为4。
实例5-7
使用逗号将两个表达式连接起来,并输出运算后的结果
源码路径daima\5\5-7
本实例的实现文件为“douhao.c”,具体实现代码如下。
#include <stdio.h> int main(void) { int a=6, b=7, c=8, x, y; //声明变量 x=a+b, b+c; //定义逗号表达式 y=(a+b, b+c); printf("%d, %d", x, y); //输出结果 }
拓展范例及视频二维码
范例5-7-01:使用逗号运算符
源码路径:演练范例\5-7-01\
范例5-7-02:实现逗号运算
源码路径:演练范例\5-7-02\
上述代码的具体实现流程如下所示。
(1)分别定义整型变量a、b和c的初始值,没有赋值给x和y。
(2)定义逗号表达式x=a+b,b+c,因为赋值运算符的优先级大于逗号运算符,所以先执行x=a+b,再执行逗号表达式。
(3)定义逗号表达式y=(a+b,b+c),因为有圆括号,所以首先执行a+b,b+c这个逗号表达式,再将结果赋值给变量y。
(4)最后通过printf输出结果。
运行上述代码后将分别输出逗号表达式的运算结果,如图5-7所示。
图5-7 执行效果
在执行逗号运算时,由于具体运算结果和变量类型有关,所以在具体运算时一定要注意定义变量的类型。例如,假设x、y为双精度型,则表达式x=1, y=x+3/2的值是2.0000000。这是因为3/2进行了取整操作,与x相加后,赋值给双精度型的y,逗号表示取右边表达式的值,以方便并列使用一些表达式。例如:for(i=0;i<5;i++,x++),这样可以使i与x一起变化,如果没有逗号,则无法达到这样的效果。