這篇文章主要是介紹 指向指針的指針 的一種用法 所以這裡不談指針或指向指針的指針他們的基礎 直接上代碼(用途:使用一個函數動態申請內存,並賦值。跳出調用函數後輸出賦值內容) [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 中 說到這裡,指向指針的指針其中的一個作用就不言而喻了