1. 问题:
在C语言中,当调用子函数并传入指针参数,在子函数中想修改指针本身的时候却发现不对劲,查阅资料后才发现原来是自己理解错了。
2. 代码:
void fun( int *a )
{
int b = 10;
a = &b;
}
int main()
{
int *p = NULL, b = 5;
p = &b;
fun(p);
printf("指针p的值是:%d\n", *p);
return 0;
}
结果返回值是5,也就是说fun()函数中并未能给a赋值地址。
3. 原因
原来fun()中传入的指针a,已经不是指针p,而是p的一个副本,即已经重新开辟一个临时指针空间a存放了一个值*p。因此虽然指针a和p都指向同一个地址*p,然而却不是同一个地址空间,故在fun()中指针赋值仅仅是给指针a赋值而已,而不是p。若是要为p赋值,可以用二重指针实现。
参考资料
C语言函数内部改变指针本身 http://blog.csdn.net/laojing123/article/details/6544275