C語言中動態分配陣列

2022-05-18 23:11:44 字數 1454 閱讀 8936

原文:

如何動態的定義及使用陣列呢?記得一般用陣列的時候都是先指定大小的。當時問老師,老師說是不可以的。後來又問了一位教c++的老師,他告訴我在c++裡用new可以做到,一直不用c++,所以也不明白。今天在逛論壇時終於找到了c語言中的用法:

int *a;

int n;

scanf("%d", &n);

a = (int *) malloc(n * sizeof(int));

....

free(a);

這樣就動態分配了陣列a[n]。陣列的長度n可輸入確定,也可用程式中的變數確定。但要注意程式結束後要用free()將其釋放,否則記憶體會洩漏。

#include 

#include 

int main()

free(a);

printf("\n");    

return 0;

}這樣就完成了陣列a[n]的動態分配,那麼多維怎麼分配呢?乙個道理啊!!!!!!!!!!!!

二維#include

#include

int main()

int nrows,ncolumns;

scanf("%d,%d",nrows,ncolumns);

區別的地方 

//為陣列分配行數      注意指標多了個* 

int **array = malloc(nrows * sizeof(*array));//注意分配的是整形指標的數量 每行元素是個整形指標

/*這裡可以寫成

int **array;

array=(int**)malloc(nrows*sizeof(int*));//這裡int可以寫成**array

//對每行分配陣列個數(就是二維陣列的列數)

for(i = 0; i < nrows; i++)

多維乙個道理 每增加一維 輸入資料就要多乙個  定義指標的時候就多乙個*  且分配的時候也要多個* 還要多個for迴圈 

三維#include

#include

int main()

int rows,colnums,num;

scanf("%d %d %d",rows,colnums,num);

int ***p=malloc(rows*sizeof(*p));

這裡可以寫成

int ***p;

p=(int***)malloc(rows*sizeof(int**));//int**可以寫成*p

for(int i=0;i

p[i]=(int**)malloc(colnums*sizeof(int*));//**p

for(int j=0;j

p[i][j]=(int*)malloc(num*sizeof(int));//這裡可以寫成*p

for(r=0;r

p[i][j][r]=...

free(p);

return 0;

C語言中動態分配陣列

很多人在編寫c語言 的時候很少使用動態陣列,不管什麼情況下通通使用靜態陣列的方法來解決,在當初學習c語言的時候我就是乙個典型的例子,但是現在發現這是乙個相當不好的習慣,甚至可能導致編寫的程式出現一些致命的錯誤。尤其對於搞嵌入式的人來所,嵌入式系統的記憶體是寶貴的,記憶體是否高效率的使用往往意味著嵌入...

C語言動態分配陣列

最近在研究c語言相關的東西,遇到了一些問題,主要是關於陣列記憶體分配的問題。我們最常用的陣列分配方式就是使用 int array 來分配固定長度的陣列,但是當需要動態分配陣列長度的時候怎麼辦呢?最近在使用的時候就遇到了,然後自己搜了搜相關的使用方法。1.先介紹基本資料型別的建立方法 int arra...

C語言中動態分配陣列 一維

問題 如何動態的定義及使用陣列呢?記得一般用陣列的時候都是先指定大小的。在c 裡用new可以做到,純c語言好像沒法做到,今天在逛的時候終於找到了c語言中的用法 看原貼 int a int n scanf d n a int malloc n sizeof int free a 這樣就動態分配了陣列a...