C语言的自加自减运算符

比如y的初值为5,为什么a=(y++)+(y++)+(y++)的值是15难道每一次y++的值都不变?但是建立一个新程序,y的初值还是5b=(++y)+(++y)+(++y... 比如y的初值为5,
为什么a=(y++)+(y++)+(y++)的值是15 难道每一次y++的值都不变?
但是建立一个新程序 ,y的初值还是5
b=(++y)+(++y)+(++y)的值是22,这又是为什么?
展开
 我来答
德克and德华

2013-02-09 · TA获得超过2650个赞
知道小有建树答主
回答量:1207
采纳率:100%
帮助的人:629万
展开全部
这两个都是未定义行为,因为(y++)+(y++)+(y++)里面没有顺序点,所以你无法保证执行完第一个y++之后,y的值是否增加了,如果增加了,那么第二个y++就会是6。
只有顺序点才能确定一个副作用被实现,在这里,副作用就是确保y++之后,y加1。
下面的那个++y亦是同理。

至于什么是顺序点,可以参考这个:
C/C++语言定义(语言的参考手册)明确定义了顺序点的概念。顺序点位于:
1. 每个完整表达式结束时。完整表达式包括变量初始化表达式,表达式语句,return语句的表达式,以及条件、循环和switch语句的控制表达式(for头部有三个控制表达式);
2. 运算符 &&、||、?: 和逗号运算符的第一个运算对象计算之后;
3. 函数调用中对所有实际参数和函数名表达式(需要调用的函数也可能通过表达式描述)的求值完成之后(进入函数体之前)。

参考资料: bbs.csdn.net/topics/370153775

我才是柳随风
推荐于2017-11-25 · TA获得超过163个赞
知道小有建树答主
回答量:109
采纳率:0%
帮助的人:48万
展开全部
这实在是个令人纠结的问题。
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...
追答
所以最好不要这样使用自增,副作用无法估计,最好单语句使用
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
齐尔大君雅
2020-04-26 · TA获得超过3669个赞
知道大有可为答主
回答量:3050
采纳率:31%
帮助的人:165万
展开全部
printf("%d\n",++i);//9
i=9
printf("%d\n",--i);//8
i=8
printf("%d\n",i++);//8
i=9
printf("%d\n",i--);//9
i=8
printf("%d\n",-i++);//-8
i=9
printf("%d\n",-i--);//-9
i=8
前面是输出值,后面是执行该语句后的i值。-i++应该这样分,输出的是-i,执行后i自动加1。i的值始终是正的,最后2个输出的是-i。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沐晨长孙振国
2020-03-11 · TA获得超过3882个赞
知道大有可为答主
回答量:3120
采纳率:27%
帮助的人:210万
展开全部
第五个:-i
++是先把
-i输出,在i=i+1;则i
=9;输出为:
-8
第六个:
-i
--是先把-i输出,再i=i-1;则i=8;
输出为
-9;

输出负数是因前面的
-
符号.,而i是正数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
昌秀荣历媪
2020-02-07 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.4万
采纳率:35%
帮助的人:752万
展开全部
a++和++a,
前一个先把a用了
然后再给a加一,后一个
先把a自己增加一
然后

做运算;
例如:
x=5;
y=++x;
x先加到6,然后再将x的值应用到表达式y=x中,y值为6
x,y都为6
x=5;
y=x++;
x为6,y为5.
同样,对于你的数组也适用!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式