在一行中为多个变量赋值完全没问题,C 编程语言允许。
但是,通常不鼓励使用这种样式,因为它在某些情况下可能会导致不良副作用。
数学方程X = Y = Z的期望可能是:
Y = Z 和 X = Z(即,将 Z 的值赋给 X 和 Y)
但 C 语言将多个赋值视为一个链,如下所示:
在C中,“X = Y = Z”的意思是必须先将Z的值赋给Y,再将Y的值赋给X。
这是一个示例程序,可以查看单行中的多个分配如何工作:
#include <stdio.h>
int main() {
int n;
int X, Y, Z;
printf("Enter an integer: ");
scanf("%d", &n);
printf("You entered: %d\n", n);
printf("Performing multiple assignments:\n X = Y = Z = n++ \n");
X = Y = Z = n++;
printf("n = %d\n", n);
printf("X = %d \n", X);
printf("Y = %d \n", Y);
printf("Z = %d \n", Z);
return 0;
}
输出:
Enter an integer: 100
You entered: 100
Performing multiple assignments:
X = Y = Z = n++
n = 101
X = 100
Y = 100
Z = 100
上例中的注意点:
行 X = Y = Z = n++ 处理如下:
第一步:将n(100)的值赋给Z
第二步:增加n的值(n变成101)
第 3 步:将 Z 的值赋给 Y(Y 变为 100)
第 4 步:将 Y 的值赋给 X(X 变为 100)
结论:
“单行中的多个分配”是受支持的样式。它有它的好处。
但是,如果程序员不知道多重赋值语句所涉及的操作顺序,那么可能会导致阅读程序的人的期望与实际执行结果不一致。
为避免这种情况,不鼓励多次分配。