问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c+=c++怎么理解

发布网友 发布时间:2022-02-28 09:56

我来回答

8个回答

热心网友 时间:2022-02-28 11:25

因为++的优先级比+=运算符的优先级要高,所以
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语言标准,已经说的非常清楚了,希望对你有帮助:)

热心网友 时间:2022-02-28 12:43

1、因为++的优先级比+=运算符的优先级要高,所以
c+=c++ 等价于 c+=(c++),又等价于
c = (c + (c++));
但需要注意的是,这个表达式的最终结果是不确定的,因为 c + (c++) 这个表达式
中,无法确定是+号前面的先求值,还是+号后面的先求值,这是由编译器决定的,C/C++标准中也是这样讲的。
2、结果就是,假如c=1;那么,如果+号左边的先求值,就是 c = 1 + 1 = 2;
如果是+号右边的先求值,就是c = 2 + 1 = 3;
在一台机器上,可能会得到2,也可能会得到3,但是不能保证在别人的机器上也一定是2或者是3。因此,像这样的表达式应该避免,尽量不要写。

热心网友 时间:2022-02-28 16:09

c+ = c++;
也就相当于
c = c + (c++);
相当于
c = c + c;
c = c + 1;
所以是
(c+=c)++

仔细看后两个结果是一样的撒!
=======================
你加了运算符优先级最高括号,所以是先执行括号里面的再执行以外的运算。
c+=(c++)的运算顺序是
c = c + 1
c = c + c
(c += c)++ 的运算顺序是
c = c + c
c = c + 1
也就是我前面回答所说的。
================
前面那个叫笨小孩的说的有理。应该是他说的那样。

热心网友 时间:2022-02-28 18:17

是c=c+(c++) ,也就是c+=(c++)
用运算符的优先级就可以判断出来

问题是在于这样写是不好的书写,lz可以试一下,在不同的编译器中的结果,在TC2.0中c最后是3,但是在VC6.0中c结果是2,问题是在于c++的自增到底是发生在整个语句结束后,还是在应用后立刻发生的追问可c++不是先使用后自增吗?

追答诚如ls所讲,这个在C语法里没有规定,是由编译器自己决定的

热心网友 时间:2022-02-28 20:42

赋值表达式,从右向左开始进行运算
c+=c++;
是按你提供的第一个表达式的优先级运算的;
等价于:c=c+(c++);
你给的第二个表达式是错误的,++/--的运算对象必须是变量,不能是数值(不能是一个表达式的计算结果)。

热心网友 时间:2022-02-28 23:23

是第一个, 运算符优先级问题,不过最好要这么写, 不好的编码习惯

热心网友 时间:2022-03-01 02:21

c = c + (c++);
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 在C语言中?:表达式是什么意思? C,C+和C++它们有什么区别 C.C的真名 C-C, C=C 有什么区别? c:\与c:区别 c+是什么? C语言'c','\c'的区别是什么? C表示什么? C语言中*&C什么意思? 在C语言中“%c%c\n”和“%d%d\n“分别说明什么。。。?? c语言中 %c表示什么 c++中%c是什么意思 c语言中%*c%c什么意思 C语言中 %*c 是什么意思? C语言中/与%的区别 %*c%c在c语言中是什么意思 C语言中“+=”是什么意思? 如何解除手机号绑定 C语言中 !是有什么含义? 怎么解除和手机号的绑定? excel中C:C和$C:$C有什么区别? C语言属于什么语言? C语言是什么类型的语言? c语言本身是开源的吗?c语言是用什么写的? c语言中for语句是怎么用的 c语言中for的用法 for在c语言中的用法 for在c语言中是什么意思? c语言中for语句的用法及规则是什么? c语言for的用法 C语言for循环的格式和用法是什么? C语言for 用法 求解c语言for的用法。 c语言for语句的用法 关于C语言中for 的用法 C语言中for语句的用法是什么? c语言for用法 c语言中for是什么意思 C语言中的“for(.....)”是什么函数? 火龙果不小心放到冰箱冻硬了,还能吃吗?