请大家帮我解答下c语言的指针

来源:百度知道 编辑:UC知道 时间:2024/09/18 04:09:10
请问:(*p)++和*p++有什么区别,说的详细点
我是想问,(*p)++和*p++在自加的时候是不是都是在数值上加1还是在地址上加1(为什么)

取地址和符和++的优先级一样
而且都是从右向左运算
所以其实*P++=*(p++)即 先做*P 然后再使用了P之后 做P++指针下移一位
而(*P)++是直接对P指针指向的那个数值加1

还有一个是*(P--)= *P--
*(P--)就相当于是数组a[i--] 这个不是先做P--再做 *P 因为 P--是在指针P使用后才进行自减 所以一开始的时候根本不会做自- 而是先做*p,即取指针P对应的数值,然后再使用了P之后再进行P--

这个我自己也老是搞错 给你写出来还特意翻书了的 当是自己回忆 嘿嘿

*P++ = *(p++) 先*P 然后P++
*++P = *(++P) 先P++ 再*P
*--P = 先P-- 再*P

*P++ =*(p++)
先取值 再++;
(*p)++ 直接取原值+1,
*p=1,p=0x00000000则a=(*p)++=2;
a=*P++ 后,a=1,p=0x00000002;
(int型的32位)

1.(*p)++是先取*p的值,然后对*p这个值进行自加,p的指向没有发生改变;
2.*p++,首先它的运算顺序是从右向左,即*(p++),先取*p的值,然后对p进行自加,p指向下一个存储单元,p的指向发生了改变。
应该很清楚了吧?

(*p)++等于指针所指的数值(*p)再加上1.
*p++等于指针所指的数值*p再加上1.
因为++这个符号没有()优先级高,所以先把*p里面的值取出来,*比++这个优先级也高,所以也是先把*p里面的值取出来,所以这2个都是在具体数值上加1.