传递参数时会生成一个复制的指针,该指针指向的位置与 原指针指向的位置相同;
即b自身在计算机的地址与a的地址不是相同的,这时你在函数体内修改a指向的位置,一定不会修改b指向的位置。
如下面这个方法
void test(int *a){
int l=2;
a=&l;
}
此时
修改之后
那么想要修改b指向怎么办,很简单,就是将b在计算机存储的地址传递过来,那么怎么传递呢,这时候就要使用双重指针了,修改为下面的方法
void test(int **p){
int l=2;
// *p代表b指针地址指向的内容,就是b指针存储的内容,也就是1的地址
*p=&l;
}
main方法
int *b=(int *)malloc(sizeof(int));
*b=1;
//传递b指针的地址
test(&b);
printf("%d",*b);
}
此时的传递过程
此时p2存储的就是b指针的地址,*p2指向的就是b指针的单元,这时候修改*p2的内容就是修改外部b指针指向的内容