6 数组
前面所介绍的变量都是简单变量,各简单变量之间相互独立,没有内在的联系,并与其所在的位置无关。在处理大量相关数据时,使用简单变量将会有很大的困难,有时甚至是不可能的。例如,在编写一个读入50名学生的学号及其考试成绩,然后再按照考试成绩从高到低的顺序把他们的学号打印出来的程序时,如使用简单变量来存放这50组数据,那么,对考试成绩进行排序处理的过程将会变得十分繁琐而复杂。如果使用数组来存放这些数据,就会极大地简化程序的设计。因此在许多场合,总是使用数组这样一个数据结构来处理数据量大、类型相同且有序排列的数据。
6.1 数组的概念
数组是一组具有相同类型的有序变量的集合。这些变量按照一定的规则排列,使用一片连续的存储单元。数组可用于存储成组的有序数据。使用数组就是用一个相同的名字引用这一组变量中的数据,这个名字被称为数组名。
6.1.3 数组命名与数组元素
数组名的命名规则与简单变量命名规则一样。数组名不是代表一个变量,而是代表有内在联系的一组变量。数组内的每一个成员称为数组元素,为了标识数组中的不同的元素,每个数组元素都有各自的编号即下标,下标确定了数组元素在数组中的位置。可以用数组名和下标唯一识别数组中的一个元素,因此数组元素又称为下标变量,数组元素的类型也就是数组的类型。数组元素名由数组名、下标和圆括号共同组成。
数组元素名的一般形式是:
  数组名(下标1[,下标2……])
其中:下标可以是常量、变量或算术表达式。当下标的值为非整数时,会按CInt函数的方式将其转换为整数处理。比如一个只有单个下标的数组A有5个元素,则它的元素可以分别表示为:A(0)、A(1)、A(2)、A(3)、A(4)。
在一个数组中,如果只须一个下标就可以确定一个数组元素在数组中的位置,则该数组称为一维数组。如果需要两个下标才能确定一个数组元素在数组中的位置,则该数组称为二维数组。依次类推,必须由N个下标才能确定一个数组元素在数组中的位置,则该数组称为N维
数组。因此确定数组元素在数组中的位置的下标数就是数组的维数。通常把二维以上的数组称为多维数组。Visual Basic 规定数组的维数不得超过60
6.1.4 数组定义
二维数组下标怎么理解在使用一个数组之前必须对数组进行定义,确定数组的名称和它的数据类型、指明数组的维数和每一维的上、下界的取值范围;这样系统就可以为数组分配一块内存区域,存放数组的所有的元素。数组的每个数组元素在这个连续的区域内都占据各自特定的单元,而单元的地址则由下标来表示。程序通过数组元素名,也就是通过数组元素的下标值来访问其中的某个存储单元。
Visual Basic 中有两种类型的数组:固定大小数组和动态数组。在定义数组时就确定了数组大小,并且在程序运行过程中,不能改变其大小的数组叫固定大小数组。在定义数组时不指明数组的大小,仅定义了一个空数组,在程序运行时根据需要才确定其大小,即在程序运行中可以改变其大小的数组,称为动态数组。
在程序中通过数组说明语句来定义数组。
1数组说明语句
数组说明语句的形式是:
PublicPrivateStaticDim <数组名>([<维界定义>])[As <数据类型>
其中:PublicPrivateStaticDim是关键字。在 Visual Basic 中可以用这4个语句定义数组。与变量说明类似,使用不同的关键字说明的数组其作用域将有所不同(表6-1)。
6-1
 
     
Public
用于标准模块的声明段,定义公用(全局)数组。
PrivateDim
用于模块的声明段,定义模块级数组。
Dim
用在过程中,定义局部数组。
Static
用在过程中,定义静态数组。
<维界定义>的格式是:
<下界1> To]上界1[[,<下界2> To] 上界2……]
其中“下界”和关键字 To 可以缺省。如果在程序中没有特别声明,即程序没有使用Option Basic 1语句,缺省下界和关键字 To 时,则表示下标的取值是从 0开始, 等价于“0 To 上界”。如果程序中使用了Option Basic 1语句,下标的取值是从 开始,等价于“1 To 上界”。
格式中的下界1表示数组第一维的维下界,下界2表示第二维的维下界……。
例如,下列数组说明语句出现在模块声明段。
Dim A(6) As Integer
Private Name(1999 To 2002) As String * 8
Dim B(2,1 to 2) As Integer
第一行数组说明语句等价于 Dim A(0 to 6) AS Integer,它定义了一个模块级的一维整型数组,数组的名字为A,该数组共有7个数组元素,分别是:A(0)A(1)A(2)A(3)A(4)A(5)A(6)
第二行数组说明语句,定义了一个模块级的、一维的、数组元素的长度为8个字节的字符串型数组Name,维下界是1999,维上界是2002。该数组的元素分别是:Name (1999)、Name (2000)、Name (2001)、Name (2002)等4个数组元素。
第三行数组说明语句,定义了一个模块级的二维整型数组,B 数组的元素是:B(0,1)、B(0,2)、B(1,1)、B(1,2)、B(2,1)、B(2,2)等6个元素。
<数组名><维界定义>)是数组说明符。例如:在语句Dim A(6) As Integer中。A(6)是数组说明符,当程序中缺省Option Base语句时,它说明了A数组是一个一维数组,维下界是0,维上界是6,有7个数组元素。尽管数组说明符A(6)与数组第7个元素的名字A(6)书写形式一样,但它们的含义不同,不要把它们混淆。出现在数组说明语句中的A(6)是数组说明符,而出现在程序的其它地方的A(6),则是A数组的下标为6的数组元素的名字。
2.数组的上、下界
某维的下界和上界分别表示该维的最小和最大的下标值。维界的取值范围不得超过长整型(Long)数据的数据范围(- 2,147,483,648 2,147,483,647),且下界≤上界,否则将产生错误。在定义固定大小数组时,维的上、下界说明必须是常数表达式,不可以是变量名。如果维界说明不是整数,VB将会对其按CInt函数的方式进行舍入处理。例如:
  Dim M As integer
  Const N As Integer = 5
  Dim A(N) As Integer
  Dim B(1 To 6.6) As Integer
  Dim C(1 To 2 * 3) As Integer
Dim D(0 To M) As Integer
上列数组说明语句中的前三个语句都是正确的,分别定义了ABC三个一维数组。其中第一条数组说明语句中用一个已定义的符号常数说明A数组的维上界,其值是5。第二条数组
说明语句定义B数组的维上界是6.6,但经过舍入处理后B数组的维上界是7。第三条数组说明语句用一个表达式说明C数组的维上界,系统首先计算出表达式的值,然后再根据表达式的值确定C数组的维上界是6。而最后一个说明语句是错误的,因为M是一个整型变量,不能用来说明数组的维界。在数组说明语句中若用符号常数说明数组的维界,那么该符号常数在这个说明语句之前必须已定义过。
3.数组的类型
数组说明语句中 As <数据类型> 是用来声明数组的类型。数组的类型可以是,IntegerLongSingleDoubleDateBooleanString(变长字符串)String*length(定长字符串)ObjectCurrencyVarant和自定义类型。若缺省As短语,则表示该数组是变体(Variant)类型。
请看下面数组定义的例子:
Option Base 1
Dim Score() ,B(3,3) As integer
Option Base 1 语句,必须位于模块的通用部分,用以说明本模块内所有缺省维下界说明的数组说明语句定义的数组,它的维下界均为1。因此数组说明语句定义了的名为Score一维数组,它的维下界是1,具有4个元素;由于缺省类型说明,所以Score数组类型是 Variant类型。该数组说明语句还定义了一个有3行、3列(3×3)的二维整型数组B
在过程中除可以用Dim 语句说明数组外,还可根据需要用Static语句定义静态数组。
静态数组的特点是,在调用过程时,它的各个元素会继承上次退出该过程时对应元素的值。例如:在过程中用下面的语句定义一个一维的整型静态数组Starry
  Static Starray(3) As Integer
4.数组的大小
用数组说明语句定义数组,指定了各维的上、下界取值范围,也就确定了数组的大小。所谓的数组的大小就是这个数组所包含的数组元素的个数。数组的大小有时也称为数组的长度。可用下面的公式计算数组的大小:
数组的大小=第一维大小×第二维大小×…第N 维大小
维的大小=维上界-维下界+1
例如:程序有下面的数组说明语句
Dim A(6) As Integer
Dim B(3, -1 To 4) As Single
A数组的大小=6-0+1=7(个数组元素)
B数组的大小=(3-0+1)×(4-(-1)+1)=4×6=24(个数组元素)
5.数组的初始化
数组说明语句不仅定义了数组,分配存储空间,而且还将数组初始化。数值型的数组元素初始值为零,变长字符类型的数组元素初始值为空字符串,定长字符类型的数组元素初始值为指定长度的空格,布尔型的数组元素初始值为False。
6.1.5 数组的结构
数组是具有相同数据类型的多个变量的集合,数组的所有元素按一定顺序存储在连续的存储单元中。下面分别讨论一维、二维和三维数组的结构。
1.一维数组的结构
一维数组只能表示线性顺序,相当于一个一维表。也可以用一维数组表示数学中的向量。请看下面的数组定义的例子:
Dim StrA(8) As Integer
数组StrA的逻辑结构示意如下:
StrA(8)=(StrA(0),StrA(1),StrA(2),……,StrA(6),StrA(7),StrA(8)
数组StrA在内存中的存放布局类似于图6-1(a)
由图6-1(a)可知一维数组在内存中存放的次序在形式上与数组的逻辑结构相同,按下标序号升序排列。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。