在c语言中y=(++a)+(++a)+(++a),那么y的值是多少呢?

如题所述

受不了了,怎么那么多人答15,虽然这个问题很没意义,但别误导人家。
15不是不对,但15只是一个编译器的实现结果,个个编译器的实现不同,此题的结果是与编译器相关的
所以标准答案,是没有标准答案
按照标准,在一个表达式内对同一变量多次++,结果是不确定的,完全是各个编译器自己说了算,我记得TC,BC,gcc和VC的答案有的就不一样
所以以上各楼的答案可以说都对,又都不对
另,楼上的人别说“绝对,我的老师说的”之类。老师犯错多了,我们大学老师上课错误我能听出一箩筐,呵呵。这类问题虽然很无聊,但还是参阅一下标准再回答比较好,毕竟道听途说来的答案会误导人的。
参考引用地址的最后一条
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-09-02
编译器不同,可能会出现不同的结果。

MS
VC++

linux
cc,
linux
gcc

15.00
程序中最好不要用二义性或多义性的语句形式,编译器不同,可能会出现不同的结果,给自己带来麻烦。

y=(++a)+(++a)+(++a)
拆开来,写明确了多好:
a
=
3;
a
=
a
+
1;
y
=
a
+
a
+
a;
-----------------
或:
a
=
3;
b
=
a
+
1;
c
=
b
+
1;
d
=
c
+
1;
y
=
b
+
c
+
d;
语句是为人服务的,程序员要做语句的主人。
书是人写的,书上错的东西有的是。书为我而用,取其精华,去其糟粕。
第2个回答  2019-10-19
首先明确执行顺序,有括号的先执行括号中语句,由于问题中的语句有三个括号,则应该自左向右的顺序执行。
++a的意思是在使用a之前把a加1。
现在假设a的初始值为A,根据之前所说的执行顺序,先执行左边第一个括号,结果为A+1,再相继执行后面两个括号,注意到a的值已经在上一次运算中发生变化,所以后面两个括号的结果分别为A+2和A+3,最后将三个括号结果相加,y=3A+6,把A=3代入,结果为15.
但是这只是按照标准C的规则得到的答案,不同的编译器有不同的解释方法,所以实际上可能得到不同的结果。

c语言中 (++a)+(++a)+(++a)是怎么算的
结果为2a-a²

c语言的问题 a = (++a)+(++a)+(++a)+(++a) 计算原理
++a是左值,它的值是累加了1之后的a,是【变量】。而a++则仅仅是一个【值】,这个值等于变量a的原始值。因此对于(++a)+(++a)+(++a),过程如下:先取第一个++a和第二个++a,以进行二元运算“+”此时,经过两次++,a的值变为3 因此计算结果为a+a=6,此时不再是变量,而是值6 然后再取...

关于C语言的怪问题(++a)+(++a)+(++a) =?
b = (++a)+(++a)+(++a);\/\/ a=8 在vs2005、linux运行结果为 b = 22 运算过程:先算括号中的,同级的遵从右到左,同时遵从四则运算规则 第一个(++a);\/\/a=6 第二个(++a);\/\/a=7 , 此时,a=7 这时运算a+a=14 结果保存到另一个临时变量 这时再运算第三个(++a);\/\/a...

c语言(a++)+(a++)+(a++)和(++a)+(++a)+(++a)
++a则是先求a=a+1,然后再做其他运算,所以(++a)+(++a)+(++a)实际上是5+5+6=16,运算后a的值是6.

关于(++a)+(++a)+(++a)的问题该怎样思考?
b于是等于24.实际上a应该是先自加2次变成7,_b=14,然后a自加一次变成8,b=14+8=22.b=(++a)+(++a)+(++a)是这样运算的:a++;a++;b=a+a;a++;b=b+a;如果不相信可以进行试验(分开做):b=(++a)+(++a)b=(++a)*(++a)b=(++a)*(++a)+(++a)这是编译器的原因 ...

b=(++a)+(++a)+(++a)怎么运算
首先要明确一点: ++a这个表达式的计算结果就是+1之后的a, 而不是a+1的结果数值 b=(++a)+(++a)+(++a)依据从左向右的顺序, 相当于b=((++a)+(++a))+(++a)所以它的计算过程如下(这里就是"脱括号"的过程了, a=0)b=(a+(++a))+(++a), 第一次脱括号的结果, 这时a=1 b=(a...

设整型变量a为2,那么(++a)+(++a)+(++a)的结果是多少?
a的值取决于几个表达式执行的顺序,然而这些表达式的执行顺序不一定是确定的!“表达式有两种功能。每个表达式都产生一个值( value ),同时可能包含副作用( side effect ),比如:他可能修改某些值。规则的核心在于 顺序点( sequence point ) [ C99 6.5 Expressions 条款2 ] [ C++03 5 Expressions ...

在c++中,b=(++a)+(++a)+(++a),a=1,b怎么就等于10了呢?a为什么等于4呢...
从右向左算先算括号里的,因为++a这个式子a会先加1,再返回值。第一个(++a)a=2,第二个(++a)a=3,第三个(++a)a= 4,最后算括号外的加法,因为(++a)这个式子的值是4,所以,b = 4+4+4 = 12。同样 b=(a++)+(a++)+(a++);的话,a++是先返回值,再加1,所以 这个式子...

(++a)+(++a)?
++a使用a进行自增后的结果,(++a)+(++a)两次自增1后a的值为5,所以5+5=10 而(++a)+(++a)+(++a)是三次自增后a=6,所以结果应该是18,不知道你有没有写错.这是要说明的是++a是先运算后引用,而a++是先引用后运算,在使用的时候要注意.补充:我在TC2的调试后面的一个是18;但VC为什么是...

c语言中,a=2,m=(++a)+ (++a)+(++a),为什麽等于13,费解,哪位大神给解...
+(++a) 值应该是26 (4 + 4 + 5 + 6 + 7 )a=2,m=(++a)+ (++a)+(++a)+(++a)+(++a)+(++a) 值应该是34 (4 + 4 + 5 + 6 + 7 +8)这个完全是编译器在作怪,没有什么可担心的,其实在实际的开发中是不允许写出这种代码的。知道有这个事就行了 ...

相似回答