指向指針的指針的使用

這篇文章主要是介紹 指向指針的指針 的一種用法

上代碼(用途:使用一個函數動態申請內存,並賦值。跳出調用函數後輸出賦值內容)
[cpp] 
#include <stdio.h>  
#include <stdlib.h>  
  
typedef struct Data  
{  
    int    da;  
} Data;  
  
void fun(Data *p);  
  
int main()  
{  
    Data    *d;  
    fun(d);  
    printf("%d", d->da);  
    return    0;  
}  
  
void fun(Data *p)  
{  
    p = (Data*)malloc(sizeof(Data));  
    p->da = 2;  
}  
我建議你直接運行看看結果,你會發現運行出錯,在這裏我建議你先思考再往下看
那麼再看看下面的這段代碼:
[cpp]  
#include <stdio.h>  
#include <stdlib.h>  
  
typedef struct Data  
{  
    int    da;  
} Data;  
  
void fun(Data **p);     //這裏改動了  
  
int main()  
{  
    Data    *d;  
    fun(&d);     //這裏改動了  
    printf("%d", d->da);  
    return    0;  
}  
  
void fun(Data **p)     //這裏改動了  
{  
    (*p) = (Data*)malloc(sizeof(Data));     //這裏改動了  
    (*p)->da = 2;     //這裏改動了  
}  
 
仔細看就不難發現改動後的代碼使用了指向指針的指針
爲什麼直接使用指針會不行呢?www.2cto.com
因爲第一段代碼裏 void fun(Data *p) 中參數是按值傳遞。調用函數自動定義一個臨時變量存儲了實參的拷貝,那麼在fun中動態分配的內存,根本就不是在main函數中指針變量d 所指向的,main中指針變量d 從頭到尾都是未定義的。
如何解決這個問題?
用指向指針的指針,把main中指針變量d 的地址傳進去。這樣在fun中分配的內存空間地址就存放在指針變量d 中
 
說到這裏,指向指針的指針其中的一個作用就不言而喻了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章