根据内存区开辟时机的不同,可以把数组分为静态数组和动态数组,通常把需要在编译时开辟内存区的数组叫静态数组,而把需要在运行时开辟内存区的数组叫动态数组。
一、动态数组的定义
在解决实际问题时,所需要的数组到底应该有多大才合适,有时可能不得而知,所以希望能够在运行时改变数组的大小。使用动态数组就可以在任何时候改变其大小,并且可以在不需要时清除动态数组所占的存储空间。因此,使用动态数组更加灵活、方便,并有助于高效管理内存。事先不知道数组的大小,并希望在运行时可以根据需要改变数组的大小,这时就要使用动态数组。建立动态数组的步骤:
第一步:声明一个没有下标的数组为动态数组。{Public|Private|Dim} 数组名()[As类型]
第二步:在使用时可多次用ReDim语句为动态数组动态分配空间。
ReDim[Preserve]数组名([下界1 to]上界1[,下界2 to]上界2…])[As数据类型]
示例:
说明:
(1)ReDim语句用来更改动态数组的维数或大小。
(2)ReDim语句不能更改动态数组的数据类型。
ReDim为数组分配空间时会清除原有的数据,故想在原有数组中追加空间可添加Preserve关键字,此时ReDim只能改变多维数组中最后一维的上界,否则运行程序报错。
动态数组以变量作为下标值,在程序运行中完成定义。通常分为两步,首先在窗体层、标准模块或过程中用Dim和Public声明一个没有下标的数组(括号不能省略),然后在过程中用ReDim语句定义带下标的数组。
ReDim语句的格式为:
Redim[Preserve]变量(下标)As类型
该语句用来重新定义动态数组,按定义的上下界重新分配存储单元,并可为定义的变量改变存储类型,当重新分配动态数组时,数组中的内容将被清除,但如果在ReDim语句中使用了Preserve选择项,则不清除数组内容。
ReDim只能出现在事件过程中,用它定义的数组是一个临时数组,即在执行数组所在的过程时为数组开辟一定的内存空间,当过程结束时,这部分内存即被释放。
图9-3 动态数组演示
说明:(www.daowen.com)
(1)在窗体层或模块层定义的动态数组只有类型,没有指定维数,其维数在ReDim语句中给出,最多不能超过8维。
(2)用ReDim语句定义的数组最多可达到60维(直接定义才可以达到60维)。
(3)可以多次用ReDim语句定义同一个数组,随时修改数组中元素的个数,而在事件过程中,开始时用ReDim定义的数组,只能改变元素的个数,不能改变数组的维数,也不能用ReDim改变数组的类型。
二、数组的清除和重定义
数组一经定义,便在内存中分配了相应的存储空间,其大小是能改变的,在一个过程中,同一个数组只能定义一次,有时候可能需要清除数组的内容,或对数组重新定义。这可以用Erase语句来实现,其格式为:
Erase数组名[,数组名]……
Erase语句用来重新初始化静态数组成部分元素,或者释放动态组的存储空间。(释放动态数组时整体都不存在)
1.静态数组
对于静态数组,例:
图9-4 静态数组元素清除
2.动态数组
对于动态数组,例:
图9-5 动态数组释放空间
说明:当把Erase语句用于静态数组时,如果这个数组是数值数组,则把数组中所有的元素置为0,如果是字符串数组,则把所有元素置为空字符串。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。