++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