通过一个小例子,来看在函数传参时,指针与“指针的指针”的区别
void testPoint1(int * point1)
{
int x = 101;
point1 = &x;
}
void testPoint2(int **point2)
{
int y = 101;
*point2 = &y;
}
int main()
{
int a = 100;
int *p = &a;
//传入指针
testPoint1(p);
printf("%d\n",*p);
//传入指向指针的指针
testPoint2(&p);
printf("%d\n",*p);
return 0;
}
执行结果:
可以很清楚的看到,当往函数中传入指针p时,我试图让p指向另外一块内存,但是未能成功。
当往函数中传入(&p)的时候,我们可以通过解引用的方式得到指针p,然后再让p指向另外一块内存。
由此可见,虽然我们采用了“地址传递”的方式,但是就传入指针本身这一过程而言,依旧使用的是“值传递”。
结论:在传递参数的时候,只有把指向指针p的指针当参数传递,才能改变指针p本身。