如果要通过函数调用来改变n阶指针所指向的地址,
则需要通n+1阶指针来做形式参数来接收n阶指针的地址。否则同阶指针的函数调用并不会改变原来指针所指向的地址。
例如:
main.c
void *handle = NULL;
chagePointer(&handle);
-----------------------------------
pointer.h
changePointer(void **handle)
{
*handle = 地址;
}
只有这样才能通过调用changePointer()函数来改变主函数中handle所指向的地址。
再比如以上程序写成如下所示:
main.c
void *handle = NULL;
chagePointer(handle);
-----------------------------------
pointer.h
changePointer(void *handle)
{
*handle = 地址;
}
这种函数调用与普通的变量调用相同,是一种地址值传递,并没有改变主函数中handle的地址值。
再看下
main.c
int a;
chageInt(a);
-----------------------------------
change.h
changeInt(int a)
{
a = 9;
}
第二个例子就类似这样的函数调用。
总结:通过一级指针可以通过函数调用来改变普通变量的值,二阶指针可以通过函数调用来改变一阶指针所指向的地址值。以此类推。