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++);