C語言中的數(shù)組空間動態(tài)開辟
在C語言中,必不可少的需要使用到數(shù)組,通常為了動態(tài)的開辟數(shù)組空間,可以使用malloc函數(shù),在C++中可以使用new關(guān)鍵字進(jìn)行空間的動態(tài)開辟與回收,動態(tài)開辟空間的方法更加靈活,更能有效的根據(jù)需要開辟空間使用。
1、一維數(shù)組
一維數(shù)組最簡單,直接使用malloc函數(shù)就可以開辟,以int型數(shù)據(jù)為例,開辟一個(gè)連續(xù)空間使用。
#include
#include
void test(int *arr){
for(int i=0;i<5;i++){
printf("%d ",arr[i]);
}
}
int main(){
int nums=5;
int *array=(int *)malloc(sizeof(int)*nums);
for(int i=0;i<5;i++){
array[i]=i;
}
test(array);
return 0;
}
在這個(gè)例子中最后的結(jié)果輸出為0 1 2 3 4;C語言中,數(shù)組變量可以看作一個(gè)指針,通過malloc將開辟空間的返回值返回給數(shù)組指針,從而可以通過隨機(jī)訪問修改和查詢數(shù)組中的值。
2、二維數(shù)組
二維數(shù)組可以看作一維數(shù)組的延申,在上一個(gè)例子一維數(shù)組中,每一個(gè)一維數(shù)據(jù)是一個(gè)int型變量,而二維數(shù)組中,將上一個(gè)例子中每一個(gè)一維變量變?yōu)橐粋€(gè) int * 變量,也就是一個(gè)指針,指向另一個(gè)開辟的動態(tài)一位空間,可以理解為一維數(shù)組的一維數(shù)組(套娃)。
#include
#include
using namespace std;
void demotest(int **mat){
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
cout<" ";
}
cout<<endl;
}
}
int main(){
int rows=4;
int columns=4;
int **matrix=(int **)malloc(rows*sizeof(int *));
for(int i=0;iint *)malloc(columns*sizeof(int));
}
for(int i=0;ifor(int j=0;jreturn 0;
}
在這個(gè)例子中,將二維數(shù)組(矩陣)看作一個(gè)二級指針(指向指針的指針),每一個(gè)二級指針指向一個(gè)開辟空間返回的一級指針。對比一維數(shù)組,可以看出,二維數(shù)組相當(dāng)于一維數(shù)組中存儲指向里一個(gè)一維數(shù)組的地址,通過函數(shù)將二維指針傳遞過去,可以獲取二維數(shù)組的地址,然后遍歷得到值。
3、三維數(shù)組
類比二維數(shù)組的例子,三維數(shù)組就可以看作二維數(shù)組的延申,三維數(shù)組在實(shí)際應(yīng)用中通??梢杂糜诖鎯GB圖片,理解二維數(shù)組之后,三維數(shù)組就較為簡單了,代碼例子如下。
#include
#include
int main(){
int channels=3;
int columns=4;
int rows=4;
int ***matrix=(int ***)malloc(sizeof(int **)*channels);
for(int i=0;iint **)malloc(sizeof(int *)*rows);
}
for(int i=0;ifor(int j=0;jint *)malloc(sizeof(int)*columns);
}
}
for(int i=0;ifor(int j=0;jfor(int k=0;kfor(int i=0;ifor(int j=0;jfor(int k=0;kprintf("%d ",matrix[i][j][k]);
}
printf("\\n");
}
printf("\\n");
}
return 0;
}
一個(gè)3x4x4的數(shù)組(矩陣),先開辟一個(gè)三級指針的空間,每一個(gè)三級指針指向的是一個(gè)二維數(shù)組,然后二維數(shù)組的開辟方法如同上一個(gè)例子中的那樣,一次類推,更高維度的數(shù)組也可以通過此類方法進(jìn)行套娃得到。
總結(jié)
在一些特定的程序中,我們常常無法預(yù)測數(shù)組的大小。如果我們自己將值分配給數(shù)組,那么它在執(zhí)行期間無法更改。這會產(chǎn)生問題,要么數(shù)組的內(nèi)存變低,要么數(shù)組占用更少的空間浪費(fèi)內(nèi)存,因此為避免這種情況,建議動態(tài)分配數(shù)組。
審核編輯 黃宇
-
C語言
+關(guān)注
關(guān)注
180文章
7575瀏覽量
134026 -
數(shù)組
+關(guān)注
關(guān)注
1文章
411瀏覽量
25821
發(fā)布評論請先 登錄
相關(guān)推薦
評論