二、数组的声明和初始化
和普通变量一样,在使用前要对数组声明。
1.静态数组的声明
静态数组是指在声明时指定数组名称,确定数组的大小,在使用时,不会改变其大小的数组。在程序编译时,按照指定的数组大小分配内存空间。
静态数组又可分为一维数组、二维数组和多维数组(本书中不讨论多维数组)。其语法格式为
Dim数组名(第一维下标上界[,第二维下标上界,…])[ As数据类型]
其中
(1)数组名后面加上一对圆括号。
(2)数组名可以是任何合法的Visual Basic.NET变量名。
(3)数组元素下标上界的个数表示数组的维数,当只有一个时,表示一维数组,最多可以声明32维数组。
(4)数组的每个维数的最大长度为Integer数据类型的最大值减1,即每个维数的最大长度为231 -1。但是,数组的总的大小受系统可用内存的限制。数组的大小(即数组元素的个数)为:上界 - 下界+1。
(5)数组元素下标下界为0,不能改变;下标上界只能用常数表达式定义。
(6)数组的数据类型可以是基本数据类型,也可以是Object类型。如果省略“As数据类型”选项,则默认为Object类型。例如
Dim A(3) As Integer '一维数组,从A(0)到A(3),4个元素 Dim B(2,3) As Decimal '二维数组,从B(0,0)到B(2,3),12个元素 Dim C(2+3) As String '一维数组,从C(0)到C(5),6个元素 Dim D(x) As String '出错,下标上界不是常数
在上面的例子中,声明String类型一维数组D时,用表达式“x”声明它的下标上界,x不是常数,因此是非法的,编译时将出错。
数组元素在存储器中是连续存放的。对于一维数组,按照数组元素的下标从小到大依次存放。例如
Dim A(5)As Integer
定义了一个一维整型数组A,数组有6个元素,下标范围为0~5,其元素分别为
A(0)A(1)A(2)A(3)A(4)A(5)
A数组在内存中的存放顺序如下图所示。
对于二维数组,则按照先行后列的顺序,依次存放。例如
Dim B(2,2)As Integer
定义了一个二维整型数组B,B数组有9个元素,分别为
B(0,0)B(0,1)B(0,2)
B(1,0)B(1,1)B(1,2)
B(2,0)B(2,1)B(2,2)
B数组在内存中的存放顺序如下图所示。
假设A班有30人,使用整数数组来存放学生的英语成绩,则定义数组为
score(0)~score(29)代表A班1~30号学生的英语成绩。
Dim score(29)As Integer
假设1年级有A、B两班各30人,使用整数数组来存英语成绩,则定义数组为
Dim score(1,29)As Integer
其中,score(0,13)代表A班14号学生的英语成绩。一般而言,一维数组处理标量(向量)数据,二维数组处理类似队列的数据。在实际应用中,二维数组的应用更广泛。
2.数组的初始化
在使用数组时,通常要求数组元素要有初始值。Visual Basic.NET允许在声明数组时指定各数组元素的初始值,称数组的初始化。
(1)一维数组的初始化
格式为
Dim数组名()[As数据类型]={值1,值2,……,值n}
在Visual Basic.NET中不允许对指定了上界的数组进行初始化,所以,数组名后面的括号必须为空。系统将根据初始值的个数确定数组的上界。还可以用New子句为数组进行初始化:
Dim数组名()[As数据类型] = New数据类型(){值1,值2,……,值n}
例如
Dim A()As Integer = {2,4,6,8}
Dim A()As Integer = New Integer(){2,4,6,8}
本例定义了一个Integer类型的一维数组A,该数组有4个初始值。因而数组的上界为3。经过初始化以后,数组各元素的值分别为
A(0)= 2 A(1)= 4 A(2)= 6 A(3)= 8
类似地,也可以对字符数组进行初始化。例如
Dim A()As String = {"姓名","语文","数学","英语"}
本例定义了一个String类型的一维数组A,该数组有4个初始值,数组的上界为3。经过初始化以后,数组的各元素的值分别为
A(0)= "姓名" A(1)= "语文" A(2)= "数学" A(3)= "英语"
(2)二维数组的初始化
二维数组的初始化相对要复杂一些,其语法格式为
Dim数组名(,)[As数据类型]={{第1行值},{第2行值},……,{第n行值} }
其中
(1)由于是二维数组,所以数组名后面的括号内必须有一个逗号。
(2)内层花括号的个数确定了二维数组的行数,其中值的个数决定了二维数组的列数。
例如
Dim B(,)As Integer = {{1,3,5,7},{2,6,10,14},{3,9,15,21} }
Dim Scores(,)As Short = New Short(1,1){{10,10},{10,10}}
本例定义了一个Integer类型的二维数组B,该数组有3行4列。经过初始化以后,有12个初始值,数组的各元素的值分别为
B(0,0)= 1,B(0,1)= 3,B(0,2)= 5,B(0,3)= 7
B(1,0)= 2,B(1,1)= 6,B(1,2)= 10,B(1,3)= 14
B(2,0)= 3,B(2,1)= 9,B(2,2)= 15,B(2,3)= 21