1樓:匿名使用者
你首先應該明白普通傳參與指標傳參的區別
void change(int n);
main()
這時對n的任何操作不影響 a的值 因 為二者完全就 是獨立的void change(int *p);
main()
這時對*p的操作就是對a的操作 因為p指向a的記憶體地址void change(int *p);
main()
這樣寫與第一個程式是一樣的 對p的操作不影響a的值 因為p與a是獨立的 只是在傳參的時候把a的值賦給了p 之後者就沒有聯絡了
所以void m(int **m); 必須這樣寫m(&a);
同理可以理解二級指標
void change(int** p);
main()
此時對*p的操作就是對a的操作 對**p的操作就是對b的操作其實c++為了解決這個引入了引用 這個概念也可以這麼寫
void m(int* &m);//這是個指標引用 對m的操作就是對a的操作
m(a);
2樓:
int *a,*b,*c,t;
只是申請了3個存放整數的指標,也即申請了3個存放整數地址的空間,至於那3個存放整數的空間,還沒有申請。
函式 m(int **x) 就是申請存放整數的空間。
m(&a);
m(&b);
m(&c);
分別對a,b,c指標,申請了存放整數的空間,此後就可以對*a,*b,*c進行存取操作了。
int **x 是2級整數指標, 而呼叫採用m(&a)是匹配的。
該程式在退出時,應釋放申請的空間。
3樓:匿名使用者
void m(int *x);宣告錯了
應該是void m(int **x)
C語言動態連結串列的問題,C語言動態連結串列問題
你自己malloc時對頭節點不是動態的 include stdio.h include malloc.h typedef struct node node void main else node head while node 0 8 0 1 0 6 0 2 0 9 0 7 include stdi...
C 題 關於動態儲存分配,下列說法正確的是
選項a,錯,new 與delete是用於動態平衡分配與釋放空間的運算子,不是函式 選項b,對,如int p new int 5 選項c,錯,要使用delete釋放空間,系統會統一管理,而不用delete釋放的空間,會造成記憶體洩漏,這種程式用的次數多,會造成記憶體耗盡 選項d,錯,不成功,會返回0。...
C靜態儲存區,棧和堆的區別
靜態儲存區 記憶體bai在程式編譯的時候就du已經分配好,zhi這塊內dao 存在程式的整個執行回期間都存在。它主要存答放靜態資料 全域性資料和常量。棧區 在執行函式時,函式 包括main函式 內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內建於處理器...