記憶體管理那些事兒 指標引數是如何傳遞記憶體的

2021-08-16 20:49:45 字數 700 閱讀 3058

01.如果函式的引數是乙個指標,不要指望用該指標去申請動態記憶體

void getmemory(char *p)

int main()

執行上面的**則會出錯。編譯器總是要為函式的每個引數製作臨時副本,指標

引數p 的副本是 _p,編譯器使 _p = p。如果函式體內的程式修改了_p 的內容,就導致引數p 的內容作相應的修改。這就是指標可以用作輸出引數的原因。在本例中,_p 申請了新的記憶體,只是把_p 所指的記憶體位址改變了,但是p 絲毫未變。所以函式getmemory並不能輸出任何東西。

02.如果非得要用指標引數去申請記憶體,那麼應該改用「指向指標的指標」

#include

#include

#include

void getmemory(char** p)

int main()

03.由於「指向指標的指標」這個概念不容易理解,我們可以用函式返回值來傳遞動態記憶體
char *getmemory(int num)

void test(void)

04.不要用return 語句返回指向「棧記憶體」的指標,因為該內存在函式結束時自動消亡
char *getstring(void)

void test(void)

關於iOS開發記憶體管理的那些事兒

1.在objc中物件是儲存在堆中的,系統並不會自動釋放堆中的記憶體 注意基本型別例如int,float是由系統自己管理的,放在棧上 2.我們可以通過dealloc方法來檢視是否乙個物件已經被 如果沒有被 則有可能造成記憶體洩露。如果乙個物件被釋放之後,那麼最後引用它的變數 我們手動設定為nil,否則...

c 指標引數是如何傳遞記憶體的

引數策略 如果函式的引數是乙個指標,不要指望用該指標去動態申請記憶體。如下 void getmemory char p,int num void test void 原因是編譯器總是為每個引數製作臨時副本。指標引數p,其副本為 p,使 p p。如果改變了 p所指的內容,相應的p所指的內容也跟著改變 ...

c 指標引數是如何傳遞記憶體的

void getmemory char p,int num void test void void getmemory char p,int num void test void 原理是一樣的,比較難理解,圖示表示 比較好的方法是 傳指標的引用 include include include inc...