多重指针
1 看到一个关于多重指针的说法:“需要频繁改变指针指向时使用”,为什么频繁改变就要用多重指针?
2 建立链表时malloc分配了空间,清空链表时为什么需要使用双重指针?
void DeleteAll(LearList* pTemp)
{
LearList* p = NULL;
while(pTemp)
{
p = pTemp;
pTemp = pTemp->pNext;
free(p);
}
}
3 另外,还有哪些情况应该使用多重指针?
[解决办法]
函数中,对于参数的操作实际上是对实参的一个副本的操作。如果要真正修改实参的话,需要传入实参的地址。
比如:
【1】
int i = 10;
现在想要在一个函数中修改i的值,则该函数的形参应该如下形式定义:
void fun(int *p)
{
int pTemp = p;
*pTemp = 100;/*这样就能修改p指向的内容了!*/
}
fun(&i);/*这样i就被修改为100了!*/
所以要在函数内部修改参数,需要传入参数的地址,也就是指针型参数。
【2】同样的,比如现在有一个指针变量:
int *pi = NULL;
现在想要在一个函数中修改pi的值,让pi指向一个整形变量,则该函数定义和调用可以如下:
void fun(int **p)
{
int *pTemp = NULL;
pTemp = malloc(1*sizeof(int));/*分配一个int型的空间*/
if(NULL != pTemp )
{
*p = pTemp ;
}
}
fun(&pi);/*这样pi就向了fun中分配的int型空间了!*/
比如现在要修改一个2重指针变量,那么函数的参数就要是3重指针形式的。道理就是这样,没有什么深奥的;楼主可以体会一下。