第4章数组与自定义类型 4.1数组的概念 42数组的基本操作 4.3控件数组 ·44自定义类型 45枚举类型 46常用算法举例
第4章 数组与自定义类型 • 4.1 数组的概念 • 4.2 数组的基本操作 • 4.3 控件数组 • 4.4 自定义类型 • 4.5 枚举类型 • 4.6 常用算法举例
41数组的概念 数组是一组相同类型数据的集合。可用数组名代表这一批数。 组成数组的每个数据都是该数组的元素,用数组名(下标)来 表示。例: Dima(1to10) as integer'定义a是下标为1至10的一维整型数组 a(1)a(2)a(3)a(4)a(5)a(6)a(7)a(8)a(⑨)a(10) dimb(10) as integer'若省略下标上界,则默认为0,b(0)-b(10) dim c(1 to 3, 1to 4)as integer c(1, 1 ) c(1, 2)c(1, ) c(1, 4) C为3×4的二维数组 c(2,1)c(2,2)c(2,3)c(2,4) c(3,1)c(3,2)c(3,3)c(3,4) Dimd(2,3) as string'd为3×4的二维数组,元素为d(0,0)~d(2,3) Dim eo as single'e为动态数组,维数和下标范围都没确定
4.1 数组的概念 •数组是一组相同类型数据的集合。可用数组名代表这一批数。 •组成数组的每个数据都是该数组的元素,用数组名(下标)来 表示。例: Dim a(1 to 10) as integer ’定义a是下标为1至10的一维整型数组 a(1) a(2) a(3) a(4) a(5) a(6) a(7) a(8) a(9) a(10) dim b(10) as integer ’若省略下标上界,则默认为0,b(0)~b(10) dim c(1 to 3,1to 4) as integer c(1,1) c(1,2) c(1,3) c(1,4) c(2,1) c(2,2) c(2,3) c(2,4) c(3,1) c(3,2) c(3,3) c(3,4) Dim d(2,3) as string ’d为3×4的二维数组,元素为d(0,0)~ d(2,3) Dim e() as single ’e为动态数组,维数和下标范围都没确定 C为3×4的二维数组
数组分类 Visual basic中的数组,按不同的方式可分为以下 几类: >按数组的大小(元素个数)是否可以改变来分 为:定长数组、动态(可变长)数组。 按元素的数据类型可分为:数值型数组、字符 串数组、日期型数组、变体数组等 >按数组的维数可分为:一维数组、二维数组 多维数组 对象数组:菜单对象数组、控件数组
数组分类 Visual Basic中的数组,按不同的方式可分为以下 几类: ➢按数组的大小(元素个数)是否可以改变来分 为:定长数组、动态(可变长)数组。 ➢按元素的数据类型可分为:数值型数组、字符 串数组、日期型数组、变体数组等。 ➢按数组的维数可分为:一维数组、二维数组、 多维数组。 ➢对象数组:菜单对象数组、控件数组
格式为数组的声明 .Dim arrayname( subscriptrangel, su bscriptrange . DIAs type] " arrayname是数组的名字。是一个标识符,命名规则与普通变量 相同。 subscriptrange指定数组中元素的下标范围,它出现的次数则代表 了数组的维数。 type指定 arrayname的数据类型。 As type子句是可选的,用来说明数组的类型,如果缺省,则 与变量的声明一样,默认为是变体类型数组。 Dim语句用于数组声明的简单形式完成四个任务 ①建立数组名 ②建立数组的数据类型。 ③指定数组中元素的数目。 ④初始化数组中每个元素的值。数值数组元素成为0,字符串数 组元素为空字符串, Variant数组元素的值为特别值 Empty
数组的声明 •格式为: •Dim arrayname([subscriptrange[,subscriptrange…]])[As type] •arrayname是数组的名字。是一个标识符,命名规则与普通变量 相同。 •subscriptrange指定数组中元素的下标范围,它出现的次数则代表 了数组的维数。 •type指定arrayname的数据类型。 •As type子句是可选的,用来说明数组的类型,如果缺省,则 与变量的声明一样,默认为是变体类型数组。 •Dim语句用于数组声明的简单形式完成四个任务: •① 建立数组名。 •② 建立数组的数据类型。 •③ 指定数组中元素的数目。 •④ 初始化数组中每个元素的值。数值数组元素成为0,字符串数 组元素为空字符串,Variant数组元素的值为特别值Empty
412静态数组和动态数组 1.静态数组 在声明时确定了大小的数组称为静态数组 (1)一维数组的声明(无隐式声明) 形式 Dim数组名(o上界>)As(to) 例:Dima(1tl1Q) As Integer?声明a数组有10个元素a(1)a(10) 1是下标的下界10是下标的上界数组元素的数据类型 若缺省,则为0例:Dimb(10) As Integer 声明了b数组可有11个元素b(0)b(10)
4.1.2 静态数组和动态数组 1. 静态数组 在声明时确定了大小的数组称为静态数组 (1) 一维数组的声明(无隐式声明) 形式: Dim 数组名([to])[As ] 或: Dim 数组名[]([to]) 例:Dim a(1 to10) As Integer ’声明a数组有10个元素a(1)~a(10) 若缺省,则为0 例: Dim b(10) As Integer 声明了b数组可有11个元素b(0)~b(10) 1是下标的下界 10是下标的上界 数组元素的数据类型
说明: 1.数组名的命名规则与变量的命名相同 2.数组的元素个数:上界下界+1。 3.缺省为0,若希望下标从1开始,可在模块的通用 部分使用 Option base语句将设为1。其使用格式是: Option Base O1l’后面的参数只能取0或1 例如: Option base1'将数组声明中缺省下标设为1 4.和不能使用变量,必须是常量,常量可以 是直接常量、符号常量,一般是整型常量
说明: 1.数组名的命名规则与变量的命名相同。 2.数组的元素个数:上界-下界+1。 3.缺省为0,若希望下标从1开始,可在模块的通用 部分使用Option Base语句将设为1。其使用格式是: Option Base 0|1 ' 后面的参数只能取0或1 例如: Option Base 1 ' 将数组声明中缺省下标设为1 4.和不能使用变量,必须是常量,常量可以 是直接常量、符号常量,一般是整型常量
5.如果省略As子句,则数组的类型为变体类型 6.数组中各元素在内存占一片连续的存储空间,一维数组 在内存中存放的顺序是下标大小的顺序,如图4-1所示: A(o)A(1)A(2)… 图4-1数组中各元素的存储顺序 (2)一维数组元素的引用 使用形式:数组名(下标) 其中:下标可以是整型变量、常量或表达式 例如:设有下面的数组B(10) As Integer° 则下面的语句都是正确的。 A(1)=A(2)+B(1)+5取数组元素运算 A()=B(i) 下标使用变量 B(i+1)=A(i+2) 下标使用表达式 引用不能下标越界
5.如果省略As子句,则数组的类型为变体类型。 6.数组中各元素在内存占一片连续的存储空间,一维数组 在内存中存放的顺序是下标大小的顺序,如图4-1所示: 图4-1 数组中各元素的存储顺序 使用形式: 数组名(下标) 其中:下标可以是整型变量、常量或表达式。 例如: 设有下面的数组B(10) AsInteger 则下面的语句都是正确的。 A(1)=A(2)+B(1)+5 ' 取数组元素运算 A(i)=B(i) ' 下标使用变量 B(i+1)=A(i+2) ' 下标使用表达式 引用不能下标越界。 (2)一维数组元素的引用
(2)多维数组 多维数组的声明 声明格式如下: Dim数组名(下标1,下标2,下标3.)As数组类型 功能:声明一个二维数组或多维数组并分配相应的存储单元 说明:参数与一维数组完全相同。下标的个数决定了数组的维 数,多维数组最大维数为60。每一维的大小为:上界一下界+1 数组的大小为每一维大小的乘积(所谓数组的大小是指数组元 素的总个数) 例如:Dima(oto2,0to3) As Sing1e 二维数组在内存的存放顺序是“先行后列”。例如数组a的 各元素在内存中的存放顺序是: a(0,0)→a(0,1)→→a(0,2)→+2(0,3)→a(1,0)→a(1,1)→a(1,2)→ a(1,3)→a(2,0)→→(2,1)→a(2,2)→a(2,3
(2) 多维数组 多维数组的声明 声明格式如下: Dim 数组名(下标1,下标2[,下标3…]) [As 数组类型] 功能:声明一个二维数组或多维数组并分配相应的存储单元。 说明:参数与一维数组完全相同。下标的个数决定了数组的维 数,多维数组最大维数为60。每一维的大小为:上界-下界+1; 数组的大小为每一维大小的乘积(所谓数组的大小是指数组元 素的总个数)。 例如:Dim a(0 to 2,0 to 3) As Single 二维数组在内存的存放顺序是“先行后列” 。例如数组a的 各元素在内存中的存放顺序是: a(0,0)→a(0,1)→a(0,2)→a(0,3)→a(1,0)→a(1,1)→a(1,2)→ a(1,3)→a(2,0)→(2,1)→a(2,2)→a(2,3)
多维数组的引用 引用形式:数组名(下标1,下标2,下标3 例如:a(1,2)=10 a(i+2,j)=a(23)*2 在程序中常常通过多重循环来操作使用多维数组元素。 (3) Option base语句 格式:0 ption Base n 功能:改变数组下标的缺省下界。 说明:n为数组下标的下界,只能是0或1。 该语句在程序中只能使用一次,且必须放在数组声明语句之前 特别注意:声明静态数组时,下标范围不能用变量名表示(即 使变量已赋值也不行)
多维数组的引用 引用形式: 数组名(下标1,下标2,下标3…) 例如: a(1,2)=10 a(i+2,j)=a(2,3)*2 在程序中常常通过多重循环来操作使用多维数组元素。 ⑶ Option Base语句 格式:Option Base n 功能:改变数组下标的缺省下界。 说明:n为数组下标的下界,只能是0或1。 该语句在程序中只能使用一次,且必须放在数组声明语句之前。 特别注意:声明静态数组时,下标范围不能用变量名表示(即 使变量已赋值也不行)
2.动态数组 动态数组可以在任何时候改变大小。 (1)创建动态数组步骤为: ①给数组附以一个空维数表,这样就将数组声明为动态数组。 格式: Dim/ Private/ Public/ Static数组名()[As数组类型] 例: Dim dynAray() ②用 ReDim语句分配实际的元素个数 格式: ReDim数组名(下标1,下标2[,下标3.]) 例 ReDim dynaray(4to12)将动态数组 DynAray的下标范围 确定下来(从4到12) 特别提示:用 ReDim语句重新定义数组时,可用变量名指定数 组下标范围;而用Diⅷm语句定义静态数组时,则不能用变量 名来指定下标范围
2. 动态数组 • 动态数组可以在任何时候改变大小。 ⑴ 创建动态数组步骤为: ①给数组附以一个空维数表,这样就将数组声明为动态数组。 格式: Dim/Private/Public/Static 数组名( ) [As 数组类型] 例: Dim DynArray( ) ② 用ReDim语句分配实际的元素个数。 格式:ReDim 数组名(下标1,下标2[,下标3…]) 例: ReDim DynArray(4 to 12) '将动态数组DynArray的下标范围 确定下来(从4到12) 特别提示:用ReDim语句重新定义数组时,可用变量名指定数 组下标范围;而用Dim语句定义静态数组时,则不能用变量 名来指定下标范围