首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

多重指针,该如何解决

2013-01-11 
多重指针1 看到一个关于多重指针的说法:“需要频繁改变指针指向时使用”,为什么频繁改变就要用多重指针?2 建

多重指针

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

热点排行