-
動態數組
鎖定
動態數組數據特點
數組到底應該有多大才合適,有時可能不得而知。所以希望能夠在運行時具有改變數組大小的能力。
動態數組就可以在任何時候改變大小。在Visual Basic中,動態數組最靈活、最方便,有助於有效管理內存。例如,可短時間使用一個大數組,然後,在不使用這個數組時,將內存空間釋放給系統。
如果不用動態數組,就要聲明一個數組,它的大小盡可能達到最大,然後再抹去那些不必要的元素。但是,如果過度使用這種方法,會導致內存的操作環境變慢。
動態數組基本步驟
要創建動態數組,請按照以下步驟執行:
(如果希望數組為公用數組,則)用 Public 語句聲明數組,或者,(如果希望數組為模塊級,則)在模塊級用 Dim 語句聲明數組,或者(如果希望數組為局部數組,則)在過程中用 Static 或 Dim 語句聲明數組。給數組附以一個空維數表,這樣就將數組聲明為動態數組。
Dim DynArray ( )
用 ReDim 語句分配實際的元素個數。
ReDim DynArray (X + 1)
ReDim語句只能出現在過程中。與 Dim 語句、Static 語句不同,ReDim 語句是一個可執行語句,由於這一語句,應用程序在運行時執行一個操作。
ReDim 語句支持這樣的語法,它與固定數組中使用的語法相同。對於每一維數,每個 ReDim 語句都能改變元素數目以及上下界。但是,數組的維數不能改變。
ReDim DynArray (4 to 12)
例如,用第一次聲明在模塊級所建立的動態數組Matrix1:
Dim Matrix1 () As Integer
然後,在過程中給數組分配空間:
Sub CalcValuesNow ()
.
.
.
ReDim Matrix1 (19, 29)
End Sub
ReDim Matrix1 (X, Y)
注意 您可以將字符串賦值給大小可變的字節數組。一個字節數組也可以被賦值給一個可變長的字符串。一定要注意字符串中的字節數會隨平台而變化。同一個字符串在 Unicode 平台上的字節數是它在非 Unicode 平台上的兩倍。
動態數組相關內容
每次執行 ReDim 語句時,當前存儲在數組中的值都會全部丟失。Visual Basic 重新將數組元素的值置為 Empty(對 Variant 數組)、置為 0(對 Numeric 數組)、置為 零長度字符串(對 String 數組)或者置為 Nothing(對於對象的數組)。
在為新數據準備數組,或者要縮減數組大小以節省內存時,這樣做是非常有用的。有時希望改變數組大小又不丟失數組中的數據。使用具有 Preserve 關鍵字的 ReDim 語句就可做到這點。例如,使用 UBound 函數引用上界,使數組擴大、增加一個元素,而現有元素的值並未丟失:
ReDim Preserve DynArray (UBound (DynArray) + 1)
在用 Preserve 關鍵字時,只能改變多維數組中最後一維的上界;如果改變了其它維或最後一維的下界,那麼運行時就會出錯。所以可這樣編程:
ReDim Preserve Matrix (10, UBound (Matrix, 2) + 1)
而不可這樣編程:
ReDim Preserve Matrix (UBound (Matrix, 1) + 1, 10)
動態數組數組運用
int main()
{
int column,row;
cout<<"輸入二維數組的行數和列數"<<endl;
cin>>row>>column;
int **array;
array = (int **) malloc(sizeof(int *)*row);
for(int i=0 ; i !=row ; i++)
array[i]=(int *) malloc(sizeof(int )*column);
cout<<"輸入二維數組"<
for(int j=0 ; j !=row ; j++)
{
for(int k=0 ; k !=column ; k++)
{
cin>>array[j][k];
}
}
for( int j=0 ; j !=row ; j++ )
{
for(int k=0 ; k !=column ; k++)
{
cout<
}
cout<
}
//釋放空間
for(int i=0 ; i !=row ; i++)
free(array[i]);
free(array);
return 0;
}