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 执行效果