读书人

多重指针,该如何解决

发布时间: 2013-01-11 11:57:35 作者: rapoo

多重指针

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重指针形式的。道理就是这样,没有什么深奥的;楼主可以体会一下。

读书人网 >C++

热点推荐