一直很懵逼指针这里,拿了个小例子,希望帮助理解
#include<stdio.h>
int main(){
int a =100;
int *p1 = &a;
int **p2 = p1; // int *(*p2); *p2 = p1; (注意,左边是地址,*p2 所以p2 = p1是相等的,不知道对不对)
int *p3;
p3 = *p2; //这句话相当于指针p3里面存储的是p2指针指向的内容(懵逼,来自于Linux内核2.6.18的.hook函数)
printf("a的值:%d\n",a); //a的值;100
printf("a的地址:%x\n",&a); //a的地址
printf("p1的里面的值:%d\n",*p1); //100
printf("p1的值:%x\n",p1); //a的地址
printf("p1的地址:%x\n",&p1); //p1的地址
printf("p2的里面的值:%d\n",*p2); // 100
printf("p2的值:%x\n",p2); //a的地址
printf("p2的地址:%x\n",&p2); //p2的地址
// printf("p3里面的值:%d\n",*p3); //
printf("p3的值:%d\n",p3); //p3是p2指针指向的值,也就是a 100
printf("p3的地址:%x\n",&p3); // p3的地址
return 0;
}
结果:
a的值:100
a的地址:efbff658
p1的里面的值:100
p1的值:efbff658
p1的地址:efbff650
p2的里面的值:100
p2的值:efbff658
p2的地址:efbff648
p3的值:100
p3的地址:efbff640
Program ended with exit code: 0
注意:(个人理解)
* 在等号左边就是表示指针,无论几个*都是指针
* 在等号右面就是表示取里面的值,