C语言中++比=优先级高,但为什么x=y++;是想把y的值赋值给x再y自加1?
3个回答
展开全部
这是后置自增操作符本身属性决定的。
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]。
展开全部
因为这个后置加就是先返回原始值……
就好比写函数
int add(int *y){
int x=*y;
*y=*y+1;
return x;
}
int X=add(&y);模拟y++
就好比写函数
int add(int *y){
int x=*y;
*y=*y+1;
return x;
}
int X=add(&y);模拟y++
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这种说法严格来说并不准确,但因为也能保证结果的正确,所以一些书籍会以这种方式来介绍后++。对于这个表达式,代码类似于如下的实现:
int z = y;
y = y + 1;
x = z;
后++会生成一个临时变量,这样既不影响自加,也不影响表达式的计算
int z = y;
y = y + 1;
x = z;
后++会生成一个临时变量,这样既不影响自加,也不影响表达式的计算
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询