因本人才疏學淺,見識淺薄,有不當之處望指正,謝謝!
當我們建立陣列時,不允許在程式執行時選擇陣列的大小和分配記憶體。如果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 函式釋放申請的記憶體空間,不造成記...