C编程从入门到实践
上QQ阅读APP看书,第一时间看更新

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一起变化,如果没有逗号,则无法达到这样的效果。