指標以及記憶體分配

2021-09-21 14:54:00 字數 558 閱讀 9488

指標很靈活,這使得指標很難管理,在定義指標時,將在棧中開闢一塊記憶體存放指標的位址(棧內的記憶體由系統分配和釋放),指標的位址記憶體只是存放指標的位址,不存放指標指向的資料,值得注意的是,定義指標時指標會隨機指向一塊記憶體,如int *p;p會指向一塊不為空的記憶體,相當危險,例如執行判斷if(!p);這裡不會輸出"p為空";所以在定義時想讓指標p為空,則要int *p = null;如果程式大的話,執行的結果出錯都不知道在**.

給指標賦值,我能力有限,只知道有兩種,一種是在堆上分配一塊記憶體(動態分配記憶體),讓指標指向這塊記憶體.第二種是指標指向棧上的一塊記憶體(一般是定義乙個非指標變數,讓指標指向這個變數);這兩種方法通過以下**實現:

不知道你是否知道我為什麼沒有在第二種方法後也加free(p2)?如果加了free(p2)編譯器會報記憶體錯誤,因為p2指向的是i記憶體,i的記憶體是在棧上,棧上的記憶體都是由系統管理,如分配和釋放,不需要手動管理,這裡使用free(p2)是在釋放i的記憶體,這塊記憶體不需要你管,你卻使用free()管理當然會報錯

#include #include int main()

指標以及記憶體的分配

1.指標很靈活,這使得指標很難管理,在定義指標時,將在棧中開闢一塊記憶體存放指標的位址 棧內的記憶體由系統分配和釋放 指標的位址記憶體只是存放指標的位址,不存放指標指向的資料,值得注意的是,定義指標時指標會隨機指向一塊記憶體,如int p p會指向一塊不為空的記憶體,相當危險,例如執行判斷if p ...

指標記憶體分配

1 一維指標記憶體分配。作陣列使用時 int p null 儲存int型別資料 int n 7 陣列長度 p int malloc sizeof int n int i for i 0 i0 free p 釋放2 指標陣列記憶體分配 int n 6 int p n 儲存int指標型別資料的陣列 p ...

記憶體管理以及分配

前面有型別的 叫定義 前面無型別的 叫使用 alloc 開闢空間,並且把空間清零 init 初始化 為0 一.棧區 凡是 在函式體內 和 方法體內 定義 的變數 都儲存在棧區 包括形參 棧的特點是 先進後出 先定義的變數 先入棧 後定義的變數後入棧 呼叫函式時 函式中的變數會陸續入棧 函式呼叫結束時...