C语言中++比=优先级高,但为什么x=y++;是想把y的值赋值给x再y自加1?

 我来答
帐号已注销
2019-12-29 · TA获得超过318个赞
知道小有建树答主
回答量:345
采纳率:90%
帮助的人:89.9万
展开全部

这是后置自增操作符本身属性决定的。

x=y++;

y++中后置++操作包含两步,一是取值,二是自增:

第一步取值,其结果是将y的值取出来,因为遇到=,所以将y值赋给x

第二步自增,其结果是将y的值加1

这两步操作虽然可以分开来看,但却又是不可分割的。


与之相关的、另一种容易误解的用法是:*ptr++(假设int *ptr=&a[0])

取值运算符*与后置自增运算符++有相同优先级,且结合方向从右至左,按理说,应该先执行ptr++,使得ptr=&a[1],从而*ptr++的值为a[1]。

然而,因为后置++的固有属性,*ptr++是先取ptr的值与*结合(第一步),再执行ptr自增加1操作(第二步),即*ptr++的值为a[0]。

三天打鱼N
2019-12-29 · TA获得超过1540个赞
知道大有可为答主
回答量:2032
采纳率:74%
帮助的人:606万
展开全部
因为这个后置加就是先返回原始值……
就好比写函数

int add(int *y){
int x=*y;
*y=*y+1;
return x;
}
int X=add(&y);模拟y++
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
最大的宝宝
2019-12-29 · TA获得超过828个赞
知道小有建树答主
回答量:1569
采纳率:67%
帮助的人:412万
展开全部
这种说法严格来说并不准确,但因为也能保证结果的正确,所以一些书籍会以这种方式来介绍后++。对于这个表达式,代码类似于如下的实现:
int z = y;
y = y + 1;
x = z;
后++会生成一个临时变量,这样既不影响自加,也不影响表达式的计算
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式