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

5.3.3 赋值表达式

用赋值运算符将运算对象连接而成的式子称为赋值表达式。例如:

    k=(j=1);

由于赋值运算符的结合性是从右向左的,因此上述赋值表达式等价于:

    k=j=1

下面都是赋值表达式的例子。

    int k, a=1, j=5;              /*a赋值为5
    a+=j++;                       /*j的值变为6*/
    a=20+(j=7);                   /*a赋值为27*/
    a=(j=9)+(k=7);                /*a赋值为16*/

赋值表达式也遵循运算优先级和转换规则,例如a=2,a+=a-=a*a的计算过程是:首先从右向左计算a-=a*a,即a=a-a*a=2-2*2=-2,此时a=-2,然后a+=-2,即a=a+(-2)=-2-2=-4。

实例5-4

实现基本的赋值表达式运算

源码路径daima\5\5-4

拓展范例及视频二维码

范例5-4-01:赋值表达式的转化类型

源码路径:演练范例\5-4-01\

范例5-4-02:复合赋值运算符的应用

源码路径:演练范例\5-4-02\

本实例的实现文件为“num123.c”,具体实现代码如下。

    #include <stdio.h>
    int main(void)
    {
        int num1, num2, num3;
        num1= num2= num3=20;
        num 1+= num3;
        num2*= num3;
        printf("num1=%d, num2=%d, num3=%d\n", num1,
num2, num3);
        printf("num1+= num2*= num2- num3 is %d\n",
num1+= num2*= num2- num3);
        printf("(num1=( num2=4)+( num3=6)) num1=%d \n", num1=( num2=4)+( num3=6));
    }

上述代码的具体实现流程如下所示。

(1)分别定义3个变量num1、num2和num3。

(2)为变量num1、num2和num3赋初始值为20,并将num1和num3的和赋值给num1。

(3)将变量num2和num3的积赋值给num2。

(4)通过printf("num1=%d,num2=%d,num3=%d\n",num1,num2,num3)输出当前的3个变量值。

(5)通过printf("num1+=num2*=num2- num3 is %d\n",num1+=num2*=num2-num3)输出num1+=num2*=num2- num3表达式的值,具体是先计算num2*=num2- num3,再计算num1+=num2。

(6)通过printf("(num1=(num2=4)+(num3=6))num1=%d \n",num1=(num2=4)+(num3=6))输出num1=(num2=4)+(num3=6)的值,具体是先进行num2=4和num3=6计算,然后进行num2+ num3计算,最后进行num1=num2+ num3运算。

运行程序后将分别输出运算表达式的处理结果,执行效果如图5-4所示。

图5-4 执行效果