原文:
如何動態的定義及使用陣列呢?記得一般用陣列的時候都是先指定大小的。當時問老師,老師說是不可以的。後來又問了一位教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...