指针辨析知识点:
定义 int x = 1, *pa =&x ,y;
++pa : pa中存储的是地址,指针加4个字节,后赋值。
pa++ : 先赋值,后指针地址加4个字节。
++pa,++(pa),pa++,(pa)++
- ++pa :
y = ++pa 我们都知道++在前面的话是先加再赋值,*pa就是对pa的地址取值,也就是x,所以这句话等同于 y = ++x ,现在x等于1,++x后x等于2,所以这时候y也等于2,pa还是指向x,pa中的地址没有变化。
2.++(*pa)这个和上一个没有区别,只不过便于辨析,我将其拿了出来。
3. *pa++:
y = *pa++ 先赋值y = x ,所以y等于x等于1,然后pa的地址向后移动一个等同于x字节的位置,所以这时候pa地址向后移动4个字节。
- (*pa)++;
看到 *pa带括号直接换成x就可,所以这个就等于 x++,所以就等于y = x++; 这时x等于1,y也等于1,加1后x变成了2,pa的地址不变。

image.png
#include <stdio.h>
int main()
{
int x =1 , *pa = &x , y;
y = *pa;
printf(" y = %d\n", y );
printf("pa内存储的地址为:%p\n", pa);
printf("pa内存储的地址为:%p\n", pa++);
printf("pa内存储的地址为:%p\n", ++pa);
y = ++*pa;
printf(" y = %d\n", y);
printf("pa内存储的地址为:%p\n", pa);
y = ++(*pa);
printf(" y = %d\n", y);
printf("pa内存储的地址为:%p\n", pa);
y = (*pa)++;
printf(" y = %d\n", y);
printf("pa内存储的地址为:%p\n", pa);
y = *pa++;
printf(" y = %d\n", y);
printf("pa内存储的地址为:%p\n", pa);
return 0;
}