C語言動態分配記憶體知識

2021-07-03 18:26:59 字數 1186 閱讀 1347

陣列的長度必須事先指定,只能是常整數,不能是變數

傳統形式定義的陣列,該陣列的記憶體程式設計師無法手動釋放,只能在定義》該陣列的函式使用完畢後,釋放陣列占用的記憶體。

陣列的長度一旦定義,其長度就不能更改。

傳統形式定義的陣列不能跨函式使用。

動態記憶體分配可以很好的解決傳統陣列的缺點。

傳統陣列也被稱之為靜態陣列。

malloc函式介紹:

malloc是memory(記憶體)allocate(分

#include #include int main(void)

雖然malloc函式返回的第乙個位元組的位址,無法表明p指向的記憶體單元》的具體位置,

但是用int *進行型別強制轉換可以,表明等號右端是乙個整型變數的地》址,而不是第乙個位元組的位址。

等號左端的指標變數也就指向了整個的這4個位元組合起來的一大塊記憶體

記憶體單元。

舉例說明:

malloc(200);//向系統申請分配200個位元組的變數儲存單元。

如果malloc(200)前面用的是char *強制型別轉換,即

(char *)malloc(200);則表示200個字元的變數

(int *)malloc(200);//表示50個整型的變數

(double *)malloc(200)//表示25個雙精度型變數

另外對於動態分配的的指標陣列,比如整型的指標陣列,

每移動一次,移動的不是乙個位元組,而是4個位元組

這是因為整型的指標變數陣列中的指標變數指向的

第乙個記憶體單元(int型別本身佔4個位元組)佔4個位元組,

等到這個指標變數移動一位,相當於陣列下標加1,

其實就指向了第二塊佔4個位元組(整型資料對應的記憶體單元)的記憶體單元

比如:

int len = 5;

int * p;

p = (int *) malloc(len *sizeof(int));

此處的p實際上指向了在記憶體空間中佔20個位元組的記憶體單元的前4個

位元組,如下圖所示

C語言動態分配記憶體

動態開闢記憶體的函式 void malloc size t size 這個函式向記憶體申請 塊連續可 的空間,並返回指向這塊空間的指標 如果開闢成功,則返回 個指向開闢好空間的指標 如果開闢失敗,則返回 個null指標,因此malloc的返回值 定要做檢查 返回值的型別是 void 所以malloc...

C語言動態分配記憶體0823

動態分配記憶體 1為什麼 2c裡面怎麼動態分配記憶體 3c new delete 1因為陣列的範圍有限,如果陣列的太大,就要申請記憶體。2molloc 在c中 然而在c 中 new 中會執行建構函式。molloc 中是不會執行建構函式,列如 maclass p new maclass 執行建構函式 ...

C語言動態分配記憶體問題

動態分配記憶體和直接分配記憶體區別 1.直接分配記憶體,如int p 是分配在棧上的,可以對其初始化 2.動態分配記憶體,int p malloc 100 是分配在堆記憶體上的 free 釋放記憶體問題 free函式只能對動態分配的記憶體進行釋放,釋放後該指標仍保留位址,但是記憶體被釋放,成為野指標...