如果數組的元素個數不知道的話,只能通過動態內存分配了,靜態內存分配是沒有辦法實現的,因為靜態內存分配在定義數組的時候必須指定數組的大小為一個常量或者常數,例如:
int array[10];
或者
const int Size=10;
int array[Size];
當然你可以采用常量的方法,但是就是每次必須打開源代碼來調整這個數組的大小,很不方便,所以要采用動態內存分配的方法;
在c語言中:
int arraysize;//元素個數
printf("請輸入數組的大小:");
scanf("%d",&arraysize);
int *array;//用指針指向一個數組
array=(int *)malloc(arraysize *sizeof(int));//動態內存分配
....
free(array);//最后要釋放這個空間,用完了,當然要還給系統
malloc()函數在內存堆區中尋找未被使用的內存,找夠所需的字節數后返回該內存的起始地址。
所需字節數通過參數知道,在本例中arraysize元素個數,乘以每一個元素的字節數,等於總的字節數;
每一個元素的字節數通過測字節sizeof()運算符得到,元素的數據類型為int,所以測int類型需要多少字節。
malloc()函數並不知道用這些內存干什么,所以返回一個沒有類型的指針,但對於整型指針array來說,malloc()函數得返回值必須顯式轉換成整型指針才能被接受。所以前面加了一個(int *)。
在c++中就可以不用malloc()函數和free()函數了。
int arraysize;//元素個數
cout<<"請輸入數組的大小:";
cin>>arraysize;
int *array;//用指針指向一個數組
array=new int[arraysize]; //動態內存分配
....
delete []array;//最后要釋放這個空間,是一組空間所以加了[]。
array=new int[arraysize];
new表示申請空間;什么類型?int;多大?arraysize
返回該內存的起始地址存到array指針中