++p、p++、++和->的优先级对地址和值的改变

++p、p++、++和->的优先级对地址和值的改变

注意(++p)->x与++p->x的区别
1、由于->的优先级比++高,所以++p->x就是++(p->x)的意思,即取指针p指向的目标x值,p指向的地址不变,但x自增1,。

2、(++p)->x 由于()和->是同级的,根据从左至右的运算规则,它的意思是先给指针p自增1,然后取增1后的指针值所指向的目标x的值。

b=*(++p) b过后p的地址+1 故p的地址为11533090----e, 故b就指向p的值-e
f=*++p与上面相同
c=++(*p) c过后 p的地址没变  但由于++自增了1,故c=e+1=f,*p=f
c=++*p与上面相同

 语句(p++)->a,由于是自加运算符作为后缀,
 【执行语句时】指针本身不加一,依然指向 array的第1个元素.
 【执行完这条语句 】 p 才加一,指向 arry的第2个元素array[2].

 其实,(p++)->a和p++ ->a的作用效果都一样,
 都是在执行这条语句时,都是输出数组p的第一个元素,
 然后再进行自加作用

a=*(p++) a过后 p的地址+1 故p的地址为11533089 —c, 但由于p++是先运行后自加故 a = a .并没有去指向p现有的地址,而是指向了P的原有地址。
e=*p++ 先引用*p赋给e,p再++,与上一个相同
d = (*p)++; d过后 p的地址没变 因为()的优先级最高,故(*p)=e,但是由于后置++,d=e,但*p=e+1=f
    注意是自增,e自加一;
   

上面不同的原因均可总结为:即使后置++遇到比它更高的优先级,后置++依然要看作整体,执行这条语句时,p先赋值,执行完这条语句后,p再++,而不是被引用的值++,除非后置++根本没有与p连在一起,如(*p)++

全文总结:

1、无括号,谁靠近p谁先执行

2、++p->x、*p++单独记忆,优先级

3、注意后置++的理解

int *p;
p = &a;
*p = 100;
第三行代码无错

原文链接:https://blog.csdn.net/qq_43543789/article/details/111211423

原文链接:https://blog.csdn.net/m0_48630293/article/details/119888024

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值