作业帮 > 综合 > 作业

C语言的自加自减运算符

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/06/23 20:23:44
C语言的自加自减运算符
比如y的初值为5,
为什么a=(y++)+(y++)+(y++)的值是15 难道每一次y++的值都不变?
但是建立一个新程序 ,y的初值还是5
b=(++y)+(++y)+(++y)的值是22,这又是为什么?
C语言的自加自减运算符
这实在是个令人纠结的问题.
C语言中区分前自增与后自增,它们都有副作用,尤其是后自增.
前自增可能更好一点,它不产生临时变量,效率更高一些.
++y相当于:y=y+1;在变量的使用之前先自增.
y++相当于:y; 其它语句...y=y+1;也就是使用它时,它的值不变,在其使用之后的某一时刻但在再次使用它前其值加一.而且不同的编译器不一定有一致的实现行为.
a=(y++)+(y++)+(y++) 这是一条语句,通常的编译器实现会将此语句一次性扫描完成.这种情况下,y++会保持其值不变,此语句完成后,将y的值递增3次.
b=(++y)+(++y)+(++y)这也是一条语句,编译器扫描完此语句后,先将y递增3次,再作+运算,将运算结果赋予b,此时b应该为24.但是不同的系统及编译器不一定这样实现,还有可能y依次递增,其结果是21.
再问: 但是在VC里面编译执行的时候结果是22...而且单独执行b=(++y)+(++y);的时候结果是14...
再答: 所以最好不要这样使用自增,副作用无法估计,最好单语句使用