問題提出
在C語言編程中,對於普通數組的定義,如定義一個包含10個int類型元素的一維數組a,我們採用下面的方式:
int a[10];
這種方式定義的數組是靜態數組,其特點是定義方便,無需管理其內存的佔用情況,但其缺點是一旦定義後,其數組的長度就固定了,而不能動態的改變其大小。
但是,在很多情況下,數組元素的個數我們是無法事先確定的。如定義一個數組,用來存儲給定的已知數組中所有大於3的元素,很明顯,這個數組的大小是不確定的,用靜態數組的定義方式是不合適的,除非你定義的數組大小足夠大,能包括足夠多的元素,但這樣會造成內存的浪費。所以,這種場合下動態數組就派上用場了。
在C語言中提供了諸如內存的申請、釋放等管理函數,然後結合指針可以按需動態地分配內存空間,來構建動態數組,達到有效利用計算機內存資源的手段。
基本函數說明
C語言中用於動態數組操作的函數主要包括malloc、calloc、realloc和free等,每個函數的原型、參數意義及功能說明如下表所示:
下面通過一個例子演示動態數組的創建及使用方法。
例子說明
編寫一個控制臺程序,能夠創建包含n個元素的動態數組,其n值由用戶輸入,數組裡面存儲的內容是n個0-9之間的隨機數。可以通過輸入不同的n值反覆創建不同個數的動態數組,當n值輸入小於等於0的數值時,程序退出。
C語言實現代碼
完整的C語言實現代碼如下:
代碼簡要解釋如下:
第9行,定義一個指向int型的指針p,其對應的內存空間用以存儲動態數組的元素。
第13-14行,輸入動態數組的元素個數,存儲到變量n中。
第16行,使用malloc函數申請能包含n個元素(n*4個字節)的地址空間,將返回的void型指針強制轉換為指向int型的指針賦予p。
第19-22行,為動態數組中的每個元素賦值(0-9之間的隨機數)。
第25-29行,在控制臺上列印動態數組中的每個元素。
第31-36行,使用free函數釋放動態內存。
程序運行結果如下圖所示:
總結
C語言中關於動態數組的編程,需要注意的是,在動態數組使用完畢後,不要忘記使用free函數將動態申請的內存釋放,否則會造成內存洩露。
如果你覺得這篇文章對你有用的話,請不要忘記點讚哦。