首页新闻找找看学习计划

C语言中++运算级高于=运算级,但为什么a=2;b=a++;所得b的值为2?

0
[已解决问题] 解决于 2018-07-13 07:43

C语言中++运算级高于=运算级,所以运行b=a++程序时,些计算a++,得到a=3,然后将a=3赋值给b,得到b=3。但运行程序却得到b=2。哪位好心人给解释一下。

gzk的主页 gzk | 菜鸟二级 | 园豆:202
提问于:2018-07-05 10:04
< >
分享
最佳答案
1

把++当成个函数,下面是这2个函数的伪代码

a++:

value = a;

a = a + 1;

return value; 

++a:

a = a + 1;

return  a;

 

理解了吗,优先级还是一样的。一定要了解接口的实现,也就是处理逻辑。

b得到的是函数返回的return值,只是函数执行后a的值改变了。

奖励园豆:5
sciapex | 菜鸟二级 |园豆:221 | 2018-07-05 12:05
其他回答(3)
0

a++先赋值后运算。   ++a是先运算再赋值

写代码的小2B | 园豆:4346 (老鸟四级) | 2018-07-05 10:07

b=a++如果先赋值在运算的话就不符合运算优先级了啊

支持(0) 反对(1) gzk | 园豆:202 (菜鸟二级) | 2018-07-05 10:15

@gzk: 死读书怎么行呢, 有前置条件的

支持(0) 反对(0) boveyyun | 园豆:217 (菜鸟二级) | 2018-07-05 18:24
0

不说原理,就说表象吧

考虑下下面两句:

b=++a;

b=a++;

当 a 和 ++ 执行后,有人希望b是2,也有人希望b是3 ,那么怎么办呢,就人为规定下,++放前面是3,放后面是2。

 

语法而已!

 

放逐人 | 园豆:623 (小虾三级) | 2018-07-05 12:01

上面的回答有问题:

a=2;b=a++;

++ 优先级高于 = 先执行,a变成了3,

接着执行=,将=右边的值赋值给b,=右边的值是多少呢?是2。

 

所以,按照问题的描述,理解不对的点在于,=不是将a的值赋值给b,而是将=右边表达式的值赋值给左边的变量!!!

支持(0) 反对(0) 放逐人 | 园豆:623 (小虾三级) | 2018-07-06 09:56
0

可以这么理解,a++在计算之后,a自增,但是返回a自增前的值。++a计算之后,a自增,返回自增后的值

所以b=a++,其实就是b等于a自增前的值。所以a=3,b=2

Heart丶 | 园豆:204 (菜鸟二级) | 2018-07-13 11:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册