动态数组
基本介绍编辑本段
|
|
特点编辑本段
数组到底应该有多大才合适,有时可能不得而知。所以希望能够在运行时具有改变 数组大小的能力。
动态 数组就可以在任何时候改变大小。在 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 语句给 Matrix 分配一个 20 × 30 的整数 矩阵(元素总大小为 600)。还有一个办法,用 变量设置动态 数组的边界:
ReDim Matrix1 (X, Y)
注意 您可以将字符串赋值给大小可变的 字节数组。一个字节数组也可以被赋值给一个可变长的字符串。一定要注意字符串中的字节数会随平台而变化。同一个 字符串在 Unicode 平台上的字节数是它在非 Unicode 平台上的两倍。
相关内容
每次执行 ReDim 语句时,当前存储在 数组中的值都会全部丢失。Visual Basi 重新将 数组元素的值置为 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)
详细信息 关于动态 数组的更详细信息,请参阅语言参考中的“ReDim 函数”。关于 对象数组,请参阅“用对象编程”。
数组运用
以上是Basic动态 数组的建立方法。在C++语言中,二维动态 数组主要使用 指针的方法建立,以建立一个整数二维数组为例:
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];
}
}
cout<<"输入的二维数组为"<<endl;
for( int j=0 ; j !=row ; j++ )
{
for(int k=0 ; k !=column ; k++)
{
cout<<array[j][k]<<" ";
}
cout<<endl;
}
//释放空间
for(int i=0 ; i !=row ; i++)
free(array[i]);
free(array);
return 0;
}
附件列表
本站全部内容禁止商业使用。文本内容除另有声明外,均在知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆(CC BY-NC-SA 3.0 CN)许可协议下提供。
如果您认为本词条还有待完善,请 编辑
上一篇 亚洲法论坛第二卷-亚洲信息法研究 下一篇 强降雨