陣列是c語言中的很重要的一種構造型別,最初我們學習的都是靜態陣列,但是,靜態陣列有著自己難以改變的缺點——陣列長度固定。
一般在靜態陣列定義後,系統就會為其分配對應長度的連續的專有記憶體空間,可是,我們都知道,不同的執行樣例,所需要的陣列長度是不一樣的,為了所有樣例都可以執行,一般我們會將陣列長度設定為乙個很大的值,比如:我一般都是借助巨集定義直接宣告1000,這個長度是可以滿足我日常所需的。雖然這種方式,滿足了一般執行的要求,但是它極大的浪費了記憶體。
於是我們引出了動態陣列的概念,顧名思義,「動態」體現在陣列長度可以由使用者自己定義上。那麼今天來總結一下,動態陣列的兩種實現方式。
c99標準規定,我們可以通過變長陣列的方式來實現動態陣列,在我們程式中使用乙個變數(非const值)從鍵盤上獲取陣列的長度。
//變長陣列實現動態陣列
c語言提供了一系列的記憶體管理函式來幫助我們來按需要動態的分配和**記憶體空間。這恰恰就是動態陣列另一種實現方式的基礎,我們可以利用記憶體管理中的記憶體申請和釋放函式,在程式的執行過程中進行陣列長度的指定。
那麼我們先來看一下動態陣列中會涉及到的常用的記憶體管理函式。(涉及到的標頭檔案是:)
(1)malloc()
(型別說明符*
)malloc
(unsigned int size)
;
(2)calloc()
(型別說明符*
)calloc
(n,size)
;
在這裡,我們需要注意一下,
(3)realloc()
(型別說明符*
)realloc
(void
*p,int size)
;
(4) free()
void
free
(void
* p)
;
注意:
在molloc,calloc,realloc三個函式中
①型別說明符是申請的位址將要儲存的資料型別;
②函式的返回值代表申請空間是否成功,如果成功,返回申請到的空間的首位址,如果不成功,返回null(我們後續的操作建立在空間申請成功的基礎上,所以我們需要在申請空間後,通過返回值判斷空間是否申請成功);
③molloc,calloc兩個函式的區別在於molloc申請的是一塊size空間,而calloc可以指定申請的塊數,即n塊size空間。
使用**來應用一下上面的幾個函式。
//以一維陣列為例,展示動態陣列的建立
#include
#include
#include
int main()
printf
("請輸入陣列元素:");
for(int i=
0; i
)printf
("列印陣列元素:\n");
for(int i=
0; i
)printf
("%d\t"
,arr[i]);
new_arr=
(int*
)realloc
(arr,
2*size*
sizeof
(int));
printf
("\n容量擴大為原來2倍,請輸入陣列元素:");
for(int i=
0; i<
2*size; i++
)printf
("\n再次列印陣列元素:\n");
**給出了一維陣列的建立,其實二維數字也是類似的方法:先申請空間——>判斷空間是否申請成功——>使用申請成功的空間——>free掉申請的空間。不過需要注意的是,二維陣列的逐層申請和釋放空間的順序。
在申請空間時,遵循由外向裡的逐層申請次序;
在釋放空間時,遵循由里向外的逐層釋放次序。
C語言學習筆記《陣列》
1,已知陣列x有5個元素,精組y有6個元素.請分別對x和y排序。輸出x和y排序後的元素 include main y 6 int i,j,sum 0 for i 0 i 4 i int i,j,sum for i 0 i 9 i for i 0 i 9 i printf d t a i code c...
C語言學習筆記(四)陣列
一 陣列 1.陣列基本使用 陣列的定義格式 型別 陣列名 元素個數 int ages 5 19 19 28 27 26 ages 1 29 ages 0 19 ages 1 19 ages 2 28 ages 3 27 ages 4 26 遍歷 按順序檢視陣列的每乙個元素 for int i 0 i...
C語言學習筆記 陣列
陣列是用來儲存乙個固定大小的同型別元素的順序集合。type arrayname arraysize intarray 5 int array intarray 5 include int main int argc,const char argv int i for i 0 i 5 i 多維陣列最簡...