c语言为啥不能连续赋值
C语言不支持连续赋值的缘由是它的语法规定了赋值操作符的结合性为从右到左。这意味着在连续赋值的情况下,赋值操作符的优先级和结合性会致使不肯定的结果。
例如,斟酌以下代码片断:
```c
int a, b, c;
a = b = c = 10;
```
根据从右到左的结合性规则,表达式 `c = 10` 会首先履行,并将 `c` 的值设置为 10。然后,表达式 `b = c` 会履行,并将 `b` 的值设置为 `c` 的值(即 10)。最后,表达式 `a = b` 会履行,并将 `a` 的值设置为 `b` 的值(即 10)。因此,终究 `a`、`b` 和 `c` 的值都被赋值为 10。
但是,如果连续赋值是允许的,那末从左到右的结合性规则会致使不肯定的结果。例如,假定代码片断被修改成:
```c
int a, b, c;
a = b = c = 10;
a = b = (c = c + 1) + 1;
```
根据从左到右的结合性规则,表达式 `c = c + 1` 会首先履行,并将 `c` 的值设置为 11。然后,表达式 `(c = c + 1) + 1` 会履行,并将 `c` 的值加 1,然后再加 1。最后,表达式 `b = (c = c + 1) + 1` 会履行,并将 `b` 的值设置为 `(c = c + 1) + 1` 的值(即 13)。但是,这个值在履行 `c = c + 1` 时已改变了。因此,终究 `a`、`b` 和 `c` 的值将不肯定。
为了不这类不肯定性和混淆,C语言规定赋值操作符的结合性为从右到左,并且不允许连续赋值。这样可以确保赋值操作的顺序是明确的,从而提高代码的可读性和可保护性。
TOP