c語言動態儲存區代替普通變數的程式

2022-03-06 07:41:00 字數 912 閱讀 8065

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函式 內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內建於處理器...