直接上**(用途:使用乙個函式動態申請記憶體,並賦值。跳出呼叫函式後輸出賦值內容)
[cpp]
#include #include typedef struct data
data;
void fun(data *p);
int main()
void fun(data *p)
我建議你直接執行看看結果,你會發現執行出錯,在這裡我建議你先思考再往下看
那麼再看看下面的這段**:
[cpp]
#include #include typedef struct data
data;
void fun(data **p); //這裡改動了
int main()
void fun(data **p) //這裡改動了
仔細看就不難發現改動後的**使用了指向指標的指標
為什麼直接使用指標會不行呢?www.2cto.com
因為第一段**裡 void fun(data *p) 中引數是按值傳遞。呼叫函式自動定義乙個臨時變數儲存了實參的拷貝,那麼在fun中動態分配的記憶體,根本就不是在main函式中指標變數d 所指向的,main中指標變數d 從頭到尾都是未定義的。(即,原來的指標d與拷貝的指標d'最終指向是不一樣的)
如何解決這個問題?
用指向指標的指標,把main中指標變數d 的位址傳進去。這樣在fun中分配的記憶體空間位址就存放在指標變數d 中(申請的記憶體返回的是首位址,與變數d的位址相對應)
說到這裡,指向指標的指標其中的乙個作用就不言而喻了
摘於:
指標的用法
c 中,成員指標是最為複雜的語法結構。但在事件驅動和多執行緒應用中被廣泛用於呼叫回叫函式。在多執行緒應用中,每個執行緒都通過指向成員函式的指標來呼叫該函式。在這樣的應用中,如果不用成員指標,程式設計是非常困難的。剛遇到這種語法時也許會讓你止步不前。但你會發現,使用恰當的型別定義之後,複雜的語法是可以...
this指標的用法
1.this指標的用處 乙個物件的this指標並不是物件本身的一部分,不會影響sizeof 物件 的結果。this作用域是在類內部,當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器會自動將物件本身的位址作為乙個隱含引數傳遞給函式。也就是說,即使你沒有寫上this指標,編譯器在編譯的時候也是加...
指標的用法
20160728 include include if 0 int sum int int int main int sum int a,int b endif if 0 int main int p a printf d n p p 1 和 的優先順序一樣的所以執行順序一樣從右到左 printf ...