void
foobar(
int
a,
int
*b,
int
**c)
{
int
*p = &a;
*p = 101;
*c = b;
b = p;
}
int
main()
{
int
a = 1;
int
b = 2;
int
c = 3;
int
*p = &c;
foobar(a, &b, &p);
printf
(
"a=%d, b=%d, c=%d, *p=%d\n"
, a, b, c, *p);
return
(0);
}
A: a=1, b=2, c=3, *p=2
函数foobar中的a是按值传递,因此在函数中的修改不会引起主函数中的变化。
函数中b传递的是主函数中b的指针,语句b = p ,其中p指向的是函数foobar内局部变量a的地址,让传递过去的指针换了指向的数据,原来指向的数据(主函数中的b)不会有影响。如果这里是*b = *p那么主函数中的b也要相应变化。
函数中的c传递的是双重指针,*c = b,也就是让主函数中的p指针指向了主函数中的b的地址
在函数foobar中对指针的变化没有影响到主函数,只是让双重指针更换了指向而已
说了半天上个图吧,比较直接。说明:值用=表示,指针用:表示,双重指针用::表示