欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 一次为多个变量赋值的方法

一次为多个变量赋值的方法

2025/5/11 9:18:27 来源:https://blog.csdn.net/jjmhx/article/details/145146436  浏览:    关键词:一次为多个变量赋值的方法

一次为多个变量赋值的方法

      • 一、批量赋值
        • 1.1 批量赋值的方式、命名
        • 1.2 批量定义、批量赋值
      • 二、批量改值
      • 三、运算次序
      • 四、补充说明

一、批量赋值

1.1 批量赋值的方式、命名

在对C语言赋值时,可以使用下面这种简化的形式对多个变量赋初值。

int a, b, c;
a=b=c=1;

有些书中将这种赋值方式说成是“连等式”,这种说法是不严谨的。
连等式是一个数学概念,指含有两个或两个以上的等号的等式。从形式上a=b=c=1是符合这个定义的,但却忽略了一个问题:C语言中的等号是“赋值运算符”,表示将右侧的值赋给左侧的变量,而并不表示等号左右两边相等,它与数学中的等号意义是完全不同的。
也就是说,在C语言里,上述式子连等式都算不上,连等式就更无从谈起。
有的书上称之为“串联赋值”,意思是把多个等号串联起来赋值,这种叫法更合理些;还有的地方叫“链式赋值”,意思差不多,老金更愿意称之为“连赋值”(正好与连等式相对应)。

1.2 批量定义、批量赋值

要注意一点:不能像下面这样批量搞定变量的定义和赋值:

int a=b=c=1; //编译出错

编译报错:

error: ‘b’ undeclared (first use in this function)
error: ‘c’ undeclared (first use in this function)

提示得很明显了吧?因为这行语句实际上只定义了第一个变量a,变b、c都在等号后面,是没有被定义的。像下面一样提前定义一下就OK了。

int b, c; //提前定义变量
int a=b=c=1; //OK

如果非要在一条语句中同时实现批量定义和批量赋值,可以这样:

int b, c, a=b=c=1; //批量定义+指量赋值

二、批量改值

在已赋初值的前提下,还可以用组合运算符一次改变多个变量的值。

int a=1, b=1, c=1;
a+=b-=c*= 1;

三、运算次序

批量赋值是从右向左依次计算的。这其实很好理解,因为赋值就将等号右侧的值赋给左边的变量,就像从右向左传球一样,所以如果有一堆串联的等号,值的源头一定是在最右边,故而也自然从最右边算起。
在这里插入图片描述

前面提到的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的值都赋值为1printf("%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;

这还算好的,用得不好还会出现神经错乱,详见:神经错乱的连赋值
所以,作为编程人员,知道怎么求解此类题目即可,在编写代码时不推荐用这种赋值方式。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词