1、批量赋值
在对C语言赋值时,可以使用下面这种简化的形式对多个变量赋初值。
int a, b, c;
a=b=c=1;
有些书中将这种赋值方式说成是“连等式”,这种说法是不严谨的。
连等式是一个数学概念,指含有两个或两个以上的等号的等式。从形式上a=b=c=1是符合这个定义的,但却忽略了一个问题:C语言中的等号是“赋值运算符”,表示将右侧的值赋给左侧的变量,而并不表示等号左右两边相等,它与数学中的等号意义是完全不同的。
也就是说,在C语言里,上述式子连等式都算不上,连等式就更无从谈起。
有的书上称之为“串联赋值”,意思是把多个等号串联起来赋值,这种叫法更合理些。
此外,要注意一点:在定义变量时不能用这种方式,如下面的代码编译时会报错:
int a=b=c=1; //编译出错
2、批量改值
在已赋初值的前提下,还可以用组合运算符一次改变多个变量的值。
int a=1, b=1, c=1;
a+=b-=c*= 1;
3、运算次序
批量赋值是从右向左依次计算的。这其实很好理解,因为赋值就将等号右侧的值赋给左边的变量,就像从右向左传球一样,所以如果有一堆串联的等号,值的源头一定是在最右边,故而也自然从最右边算起。
前面提到的a+=b-=c*= 1;按从右向左可以解析为以下代码:
c*= 1; //c=c*1=1*1=1
b-=c; //b=b-c=1-1=0
a+=b; //a = a+b=1+0=1
有兴趣的可以尝试一下以下完整代码:
#include<stdio.h>
int main(){
int a=0,b=0,c=0; //不能用a=b=c= 0的形式,否则报错
a=b=c=1;//这是可以通过编译的,a,b,c的值都赋值为1
printf("%d %d %d\n", a, b, c);
a+=b-=c*= 1; //也可以用组合的运算符
printf("%d %d %d\n", a, b, c);
return 0;
}
最后,需要强调的一点是,这种赋值方式看以高效便捷,但对看代码的人并不友好,在有组合运算符时,有时会很难理解,比如下面的代码:
a+=a-= a*a;
a^=b^=a^=b;
所以,作为编程人员,知道怎么求解此类题目即可,在编写代码时不推荐用这种赋值方式。