c 動態陣列

2021-06-19 08:41:28 字數 4024 閱讀 8511

在建立動態陣列的過程中我們要遵循乙個原則,那就是在建立的時候從外層往裡層,逐層建立;而釋放的時候從裡層往外層,逐層釋放。這個話你讀了可能理解並不深刻,不過不要急,接下來我們看看兩段**。

一維動態陣列的建立:

#include

#include

int main()

{int n1,i;

int *array;

printf("請輸入所要建立的一維動態陣列的長度:");

scanf("%d",&n1);

array=(int*)calloc(n1,sizeof(int));

for(i=0;i執行結果為:

特此說明:在以後的執行結果部分,我均會附上文字結果,以防開啟失敗。

請輸入所要建立的一維動態陣列的長度:4

0       0       0       0

1       2       3       4       press any key to continue

在此我使用的是calloc()函式來分配的,同時也使用兩個for語句來列印陣列元素,我們發現第乙個列印輸出的陣列元素值均為0,在此也是為了加深讀者對於calloc()函式的印象我特地使用了它來分配,如果對於calloc()、malloc()、realloc()函式的區別還是很清楚的讀者可以去看看我的另外一篇部落格------c語言的那些小秘密之記憶體分配。

二維陣列的建立:

#include

#include

int main() 

{ int n1,n2; 

int **array,i,j; 

printf("請輸入所要建立的動態陣列的第一維長度:");

scanf("%d",&n1);

printf("請輸入所要建立的動態陣列的第二維長度:");

scanf("%d",&n2); 

array=(int**)malloc(n1*sizeof(int*)); //第一維 

for(i=0;i執行結果為:

請輸入所要建立的動態陣列的第一維長度:3

請輸入所要建立的動態陣列的第二維長度:3

1       2       3

4       5       6

7       8       9

press any key to continue

有了上面的**我們再來說動態陣列的建立就簡單了,以二維為例,先說建立,還記得我們上面說的建立的原則嘛:從外層往裡層,逐層建立。

array=(int**)malloc(n1*sizeof(int*)); //第一維

以上是我們建立二維動態陣列的最外層,建立好了最外層那麼我們接下來就是要建立次外層了。

array[i]=(int*)malloc(n2* sizeof(int));//第二維

在建立次外層的過程中我們使用了乙個for喜歡語句,千萬別忘了使用for迴圈語句,這是絕大多數人的乙個易錯點。

建立好了接下來我們該講到釋放了,而釋放的時候從裡層往外層,逐層釋放。剛剛與我們上面的建立相反,在以上**中我們首先使用了下面乙個for迴圈來釋放裡層。

for(i=0;i在通過以下語句來釋放外層。

free(array);//釋放第一維指標

如果出現多維的情況怎麼做呢,我們接下來再來看看乙個三維動態陣列的建立和釋放,以加深下讀者的印象。**如下:

#include

#include

int main() 

{ int n1,n2,n3; 

int ***array; 

int i,j,k; 

printf("請輸入所要建立的動態陣列的第一維長度:");

scanf("%d",&n1); 

printf("請輸入所要建立的動態陣列的第二維長度:");

scanf("%d",&n2); 

printf("請輸入所要建立的動態陣列的第三維長度:");

scanf("%d",&n3); 

array=(int***)malloc(n1*sizeof(int**));//第一維 

for(i=0; i執行結果為:

請輸入所要建立的動態陣列的第一維長度:3

請輸入所要建立的動態陣列的第二維長度:3

請輸入所要建立的動態陣列的第三維長度:3

1       2       3

2       3       4

3       4       5

2       3       4

3       4       5

4       5       6

3       4       5

4       5       6

5       6       7

press any key to continue

看了以上三維動態陣列的建立和釋放**以後,我想讀者這個時候已經可以自己編寫任意維的動態陣列了。但是細心的讀者可能發現了乙個問題,那就是我們所講的動態陣列都是一次性建立好的,如果接下來在使用的過程中我們使用的陣列需要擴充套件或者刪減一些不再使用元素該怎麼辦呢?!接下來我們先看一段關於動態陣列擴充套件的**,在此以一維動態陣列的擴充套件為例,其它的以此類推。

#include

#include

int main()

{int*n,*p;

int i,n1,n2;

printf("請輸入所要建立的動態陣列的長度:");

scanf("%d",&n1); 

n=(int*)calloc(n1,sizeof(int));

printf("請輸入所要擴充套件的動態陣列的長度:");

scanf("%d",&n2); 

p=(int*)realloc(n,(n2)*sizeof(int));//動態擴充陣列

for(i=0;i執行結果如下:

請輸入所要建立的動態陣列的長度:6

請輸入所要擴充套件的動態陣列的長度:25

1       2       3       4       5

6       7       8       9       10

11      12      13      14      15

16      17      18      19      20

21      22      23      24      25      press any key to continue

看了上面的**讀者應該知道如何來擴充套件動態陣列了,可能有的讀者對於realloc()函式的使用有些陌生,如果有什麼疑惑的話可以參考我之前寫的一篇博文------c語言的那些小秘密之記憶體分配,在此我就不再做過多的講解了。

接下來如何縮小動態陣列。

#include

#include

int main()

{int*n,*p;

int i,n1,n2;

printf("請輸入所要建立的動態陣列的長度:");

scanf("%d",&n1); 

n=(int*)calloc(n1,sizeof(int));

for(i=0;i執行結果為:

請輸入所要建立的動態陣列的長度:25

1       2       3       4       5

6       7       8       9       10

11      12      13      14      15

16      17      18      19      20

21      22      23      24      25

請輸入所要縮小的動態陣列的長度:15

1       2       3       4       5

6       7       8       9       10

11      12      13      14      15

press any key to continue

在這裡值得注意的一點就是在縮減動態陣列的時候,它是刪除了後面的元素,而前面的元素保持不變。在使用realloc()函式的時候要由其注意它的使用規則。

C 動態陣列

原 1.變長一維陣列 這裡說的變長陣列是指在編譯時不能確定陣列長度,程式在執行時需要動態分配記憶體空間的陣列。實現變長陣列最簡單的是變長一維陣列,你可以這樣做 1 檔名 array01.cpp 2 include 3 using namespace std 4 int main 5 注意int p ...

c 動態陣列

這學期學c 晚上有道程式設計題,比較坑,感覺要用動態陣列做,但實際就是要用靜態陣列,因為動態的反而更難了。用動態陣列的時候,發現自己只會建立一維的 int a new int 5 然後二維陣列怎麼創都忘記了,還是那句話 不寫 很容易 忘記。然後下面就給出幾個例子吧 cpp view plain co...

c 動態陣列

首先 為什麼需要動態定義陣列呢?這是因為,很多情況下,在預編譯過程階段,陣列的長度是不能預先知道的,必須在程式執行時動態的給出 但是問題是,c 要求定義陣列時,必須明確給定陣列的大小,要不然編譯通不過 如 int array 5 正確 int i 5 int array i 錯誤 因為在編譯階段,編...