C語言 用malloc 建立動態陣列

2021-09-11 08:42:55 字數 2169 閱讀 1878

因本人才疏學淺,見識淺薄,有不當之處望指正,謝謝!

當我們建立陣列時,不允許在程式執行時選擇陣列的大小和分配記憶體。如果n是乙個整形變數。

double a[n]

;// c99以前不允許,n是變數

但是,可以

a =

(double*)

malloc

(n *

sizeof

(double))

;// 允許

關於記憶體分配。所有程式都必須預留足夠多記憶體儲存程式使用的資料。這些記憶體有的是自動分配。比如,下面宣告:

float a;

char words=

"let's study the c language!"

;

為乙個float型別的值和乙個字串預留了足夠的記憶體,或者可以顯式指定分配一定數量的記憶體;

int number[

100]

;

該宣告預留了100個記憶體位置,每個位置都用於儲存int型別的值。

靜態資料在程式載入記憶體時分配,而自動資料在程式執行塊時分配,並在程式離開該塊時釋放。

extern

void

*malloc

該函式接受乙個引數:所需的記憶體位元組數。malloc()函式會找到合適的空閒記憶體塊,這樣的記憶體是匿名的。就是說,malloc()分配記憶體,不會為其賦名。但是,它確實返回動態分配記憶體塊的首位元組位址。可以把該位址賦給指標變數,並使用指標訪問這塊記憶體。

我們用malloc()建立乙個陣列。除了用malloc()在程式執行時請求一塊記憶體,還需要乙個指標記錄這塊記憶體的位置。比如:

double

* a;

a =(

double*)

malloc(30

*sizeof

(double))

;

應該堅持使用強制型別轉換,提高**的可讀性。

以上**為30個double型別的值請求記憶體空間,並設定a指向該位置。指標a指向乙個double型別,不是指向內含30個double型別值的塊。

malloc()和free()配套使用

free()將記憶體歸還記憶體池

malloc()和free()的原型都在stdlib.h標頭檔案中

使用malloc(),程式可以在執行時才確定陣列大小。如下:

// dyn_arr -- 動態分配陣列

#include

#include

// 為malloc(), free()提供原型

intmain

(void

) a =

(double*)

malloc

(max *

sizeof

(double))

;if(a ==

null

)// a 現在指向有max個元素的陣列

printf

("enter the values (q to quit):\n");

while

(i < max &&

scanf

("%lf"

,&a[i])==

1)++i;

printf

("here are your %d entries:\n"

, number = i)

;for

(i =

0; i < number; i++)if

(i %7!=

0)printf

("\n");

printf

("done.\n");

free

(a);

return0;

}

如圖:

輸入6個數:

雖然輸入6個數,但是程式也只處理前5個數

C語言用malloc函式申請二維動態陣列

c語言在程式執行中動態的申請及釋放記憶體十分方便,一維陣列的申請及釋放比較簡單。sample one include int main 是否申請二維動態記憶體也如此簡單呢?答案是否定的。申請二維陣列有一下幾種方法 sample two 申請乙個5行3列的字元型陣列 char p null int i...

詳解C語言用malloc函式申請二維動態陣列的例項

詳解c語言用malloc函式申請二維動態陣列的例項 c語言在程式執行中動態的申請及釋放記憶體十分方便,一維陣列的申請及釋放比較簡單。sample one include int main 是否申請二維動態記憶體也如此簡單呢?答案是否定的。申請二維陣列有一下幾種方法 sample two 申請乙個5行...

C語言之malloc用法,C語言動態開闢記憶體

c 庫函式 voidmalloc size t size 分配所需的記憶體空間,並返回乙個指向它的指標 所以需要乙個指標來接收使用這個開闢的記憶體空間,size 記憶體塊的大小,以 位元組 為單位。如果請求失敗,則返回null。使用完malloc 需要配合free 函式釋放申請的記憶體空間,不造成記...