c+=c++怎么理解
2个回答
展开全部
因为++的优先级比+=运算符的优先级要高,所以
c+=c++
等价于
c+=(c++),又等价于
c
=
(c
+
(c++));
但需要注意的是,这个表达式的最终结果是不确定的,因为
c
+
(c++)
这个表达式
中,无法确定是+号前面的先求值,还是+号后面的先求值,这是由编译器决定的,C/C++标准中也是这样讲的。
结果就是,假如c=1;那么,如果+号左边的先求值,就是
c
=
1
+
1
=
2;
如果是+号右边的先求值,就是c
=
2
+
1
=
3;
在你的机器上,可能会得到2,也可能会得到3,但是你不能保证在别人的机器上也一定是2或者是3。因此,像这样的表达式应该避免,尽量不要写。
针对你对问题的补充,我再说一下,
你的结果正好是我所说的,编译器从+号右边先求值了
顺序如下:
c
=
c
+
c++;
先计算
+号右边的c++,需要注意的是,是先求值,后自增,即如果c=1,c++的值是1,但运算
之后c就变成了2了,这样就是相等于
c
=
(c+1)
+
c
=
2c
+
1了
因为先对+号右边求值,所以c++的值虽然还是c,但运算之后+号左边后求值时的c已经是c++运算结果的(c+1)了,所以才等于
(c+1)
+
c
=
2c+1
就是这么回事,我结合ANSI
C语言标准,已经说的非常清楚了,希望对你有帮助:)
c+=c++
等价于
c+=(c++),又等价于
c
=
(c
+
(c++));
但需要注意的是,这个表达式的最终结果是不确定的,因为
c
+
(c++)
这个表达式
中,无法确定是+号前面的先求值,还是+号后面的先求值,这是由编译器决定的,C/C++标准中也是这样讲的。
结果就是,假如c=1;那么,如果+号左边的先求值,就是
c
=
1
+
1
=
2;
如果是+号右边的先求值,就是c
=
2
+
1
=
3;
在你的机器上,可能会得到2,也可能会得到3,但是你不能保证在别人的机器上也一定是2或者是3。因此,像这样的表达式应该避免,尽量不要写。
针对你对问题的补充,我再说一下,
你的结果正好是我所说的,编译器从+号右边先求值了
顺序如下:
c
=
c
+
c++;
先计算
+号右边的c++,需要注意的是,是先求值,后自增,即如果c=1,c++的值是1,但运算
之后c就变成了2了,这样就是相等于
c
=
(c+1)
+
c
=
2c
+
1了
因为先对+号右边求值,所以c++的值虽然还是c,但运算之后+号左边后求值时的c已经是c++运算结果的(c+1)了,所以才等于
(c+1)
+
c
=
2c+1
就是这么回事,我结合ANSI
C语言标准,已经说的非常清楚了,希望对你有帮助:)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |