陣列的長度必須事先指定,只能是常整數,不能是變數傳統形式定義的陣列,該陣列的記憶體程式設計師無法手動釋放,只能在定義》該陣列的函式使用完畢後,釋放陣列占用的記憶體。
陣列的長度一旦定義,其長度就不能更改。
傳統形式定義的陣列不能跨函式使用。
動態記憶體分配可以很好的解決傳統陣列的缺點。
傳統陣列也被稱之為靜態陣列。
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函式只能對動態分配的記憶體進行釋放,釋放後該指標仍保留位址,但是記憶體被釋放,成為野指標...