C语言可以连续赋值么?如c=a=b=5????说详细哦

Python012

C语言可以连续赋值么?如c=a=b=5????说详细哦,第1张

优先级

在c语言的表达式中,如果存在多个运算符的时候,需要考虑数据的优先级和结合方向的问题,例如:x = a + b * c -d在这个例子中,c语言的处理流程是:

1. 先做乘法b*c,

2. 然后先做加法,后做减法

3. 最后将计算结果赋值给x

我们验证一下:

1 + 2 *3 -4,结果为3,验证成功!

通过这个例子,我们可以总结如下:对于表达式

a op1 b op2 c ,它的运行逻辑有两种可能性:

1. 如果op1优先级高于op2,则为:(a op1 b) op2 c

2. 如果op2优先级高于op1,则为:a op1 (b op2 c)

如果op1与op2优先级相同,则取决于结合方向。所谓结合方向指的是“从左至右”或“从右至左”。

结合方向

关于结合方向,我们一起来探讨一下,还是刚刚的例子:x = a+b *c -d,这里面有二元运算和赋值运算,在c语言中:

l 赋值运算的结合方向为:从右至左

l 二元运算符的结合方向为:从左至右

我们假设 b*c 的值为m,则,

l a + m -d 可以翻译为 (a + m) -d,,结合方向是从左至右

l x = a + m -d 可以翻译为: x = (a + m -d),结合方向是从右至左

在C/C++中,所有的运算符都有明确的优先级和结合方向定义,具体如下:

问题解答

铺垫好了知识点,我们回归到最初的问题上,x +=5 ==4,

由于==号的优先级大于+=号,所以这句代码的逻辑可以解读为:

1. x += (5 ==4)

2. 即先判断 5 == 4是否成立,此时不成立,返回false,即返回0

3. 然后再计算x+=0,所以最终结果为0。

使用代码验证一下:

执行结果:

可以看到,输出的结果依然为10,说明x添加的值为0,得到验证。

接下来,我们修改一下代码,让两个数字比较值返回true,再次验证一下结果。

那个,单刀直入谈问题吧。

首先我们应该知道,成员运算符 ->优先级远高于 = 。

因此,源语句等价于

(head->next) = (head->prior) = NULL // 推荐百度“C语言运算符优先级”

我们还应该知道,“=”运算符具有结合性,由右向左。

因此,源语句等价于

(head->next) = ((head->prior) = NULL) // 推荐百度“C语言赋值运算符结合性”

这时候就可以逐部分分析了:

首先执行 (head->prior) = NULL, 将 NULL 赋值给 head->prior (清空head->prior)。

紧随其后,该语句返回一个值 NULL(赋值语句返回值为被赋的值)。

这时候,执行 (head->next) = NULL 。

也就等价于

head->next  = NULL 

head->prior = NULL