vb变量、常数和数据类型及过程概述(七)

Variant 变量中存储的 Objects
可以将 Objects 存储在 Variant 变量中。当需要高效地处理包括 Objects 在内的各种数据类型时,这可能十分有用。例如,一个数组中的所有元素都必须具有相同的数据类型。将数组的数据类型设置成 Variant 就可将Objects 连同其它数据类型一起存入同一个数组中。

数组
如果有过用其它语言编程的经历,那么想必会熟悉数组的概念。由于有了数组,可以用相同名字引用一系列变量,并用数字(索引)来识别它们。在许多场合,使用数组可以缩短和简化程序,因为可以利用索引值设计一个循环,高效处理多种情况。数组有上界和下界,数组的元素在上下界内是连续的。因为 Visual Basic对每一个索引值都分配空间,所以不要不切实际声明一个太大的数组。
注意 这一部分讨论的数组是程序中声明的变量数组。它们不同于控件数组,控件数组是在设计时通过设置控件的 Index 属性规定的。变量数组总是连续的;与控件数组不同的是,不能从一个数组的中部加载或卸载数组元素。
一个数组中的所有元素具有相同的数据类型。当然,当数据类型为 Variant时,各个元素能够包含不同种类的数据(对象、字符串 、数值等等)。可以声明任何基本数据类型的数组,包括用户定义的类型(请参阅第八章“再论编程”中的“创建自己的数据类型”)和对象变量(请参阅第九章“用对象编程” ) 。
在Visual Basic中有两种类型的数组:固定大小的数组——它总是保持同样的大小,以及在运行时大小可以改变的动态数组。在本章后面的“动态数组”中将要详细讨论动态数组。

声明固定大小的数组
有三种方法声明固定大小的数组,用哪一种方法取决于数组应有的有效范围:
建立公用数组,在模块的声明段用 Public 语句声明数组。
建立模块级数组,在模块的声明段用 Private 语句声明数组。
建立局部数组,在过程中用 Private 语句声明数组。

设定上下界
声明数组时,在数组名之后跟一个用括号括起来的上界。上界不得超过 Long数据类型的范围(-2,147,483,648 到 2,147,483,647)。例如,下列数组声明可出现在模块的声明段:
Dim Counters (14) As Integer '15 个元素。
Dim Sums (20) As Double '21 个元素。
为建立公用数组,直接用 Public 取代 Dim。
Public Counters (14) As Integer
Public Sums (20) As Double
在过程之中同样的声明使用 Dim:Dim Counters (14) As IntegerDim Sums (20) As Double第一个声明建立了一个有 15 个元素的数组,其索引号从 0 到 14 。第二个声明建立了一个有 21 个元素的数组,其索引号从 0 到 20 。缺省的下界为 0。
为了规定下界,用关键字 To 显式提供下界(为 Long 数据类型):
Dim Counters (1 To 15) As Integer
Dim Sums (100 To 120) As String
在前述声明中,Counters 的索引值范围从 1 到 15,而 Sums 的索引值范围从 100 到 120。

包含其它数组的数组
有可能建立 Variant 数据类型数组,并与不同数据类型的数组共居一处。以下代码建立两个数组,一个包含整数,而另一个包含 字符串。然后声明第三个 Variant 数组,并将整数和字符串数组放置其中:
Private Sub Command1_Click ()
Dim intX As Integer '声明计数器变量。
'声明并放置整数数组。
Dim countersA (5) As Integer
For intX = 0 To 4
countersA (intX) = 5
Next intX
'声明并放置字符串数组。
Dim countersB (5) As String
For intX = 0 To 4
countersB (intX) = "hello"
Next intX
Dim arrX (2) As Variant '声明拥有两个成员的新数组。
arrX (1) = countersA () '将其它数组移居到数组。
arrX (2) = countersB ()
MsgBox arrX (1) (2) '显示每一个数组的成员。
MsgBox arrX (2) (3)
End Sub

多维数组
有时需要追踪记录数组中的相关信息。例如,为了追踪记录计算机屏幕上的每一个像素,需要引用它的 X、Y 坐标。这时应该用多维数组存储值。可用 Visual Basic 声明多维数组。例如,下面的语句声明了一个过程内的10×10的二维数组。
Static MatrixA (9, 9) As Double
可用显式下界来声明两个维数或两个维数中的任何一个:
Static MatrixA (1 To 10, 1 To 10) As Double
可以将所有这些推广到二维以上的数组。例如:
Dim MultiD (3, 1 To 10, 1 To 15)
这个声明建立了三维数组,大小为 4 × 10 × 15。元素总数为三个维数的乘积,为 600。
注意 在增加数组的维数时,数组所占的存储空间会大幅度增加,所以要慎用多维数组。使用 Variant 数组时更要格外小心,因为它们需要更大的存储空间。

时间: 2024-11-03 21:38:21

vb变量、常数和数据类型及过程概述(七)的相关文章

vb变量、常数和数据类型及过程概述(三)

常数 经常会发现代码包含一些常数值,它们一次又一次地反复出现.还可发现,代码要用到很难记住的数字,而那些数字没有明确意义.在这些情况下,可用常数大幅度地改进代码的可读性和可维护性.常数是有意义的名字,取代永远不变的数值或字符串.尽管常数有点像变量,但不能像对变量那样修改常数,也不能对常数赋以新值.常数有两种来源:1.内部的或系统定义的常数是应用程序和控件提供的.在"对象浏览器"中的 Visual Basic ( VB ) .和 Visual Basic for applications

vb变量、常数和数据类型及过程概述(九)

过程概述 将程序分割成较小的逻辑部件就可以简化程序设计任务.称这些部件为过程,它们可以变成增强和扩展 Visual Basic 的构件. 过程可用于压缩重复任务或共享任务,例如,压缩频繁的计算.文本与控件操作和数据库操作.用过程编程有两大好处:1.过程可使程序划分成离散的逻辑单元,每个单元都比无过程的整个程序容易调试.2.一个程序中的过程,往往不必修改或只需稍作改动,便可以成为另一个程序的构件.在 Visual Basic 中使用下列几种过程:Sub 过程不返回值.Function 过程返回值.

vb变量、常数和数据类型及过程概述(一)

在Visual Basic环境下进行计算时,常常需要临时存储数据.例如,可能想要计算几个值,将它们进行比较,并根据比较的结果对它们进行不同的操作.如果想要比较这些值,就要存储它们,但不必把它们存入属性.像大多数编程语言那样,Visual Basic 使用变量来存储值.变量具有名字(用来引用该变量所含的值的名词)和数据类型(确定变量可以存储的数据的种类).数组可以用来存储建立了索引的相关变量集. 常数也存储数值,顾名思义,在整个应用程序执行过程中,这些值都保持不变.常数的使用增加了代码的可读性,因

vb变量、常数和数据类型及过程概述(十)

标准模块中的过程如果过程名是唯一的,则不必在调用时加模块名.无论是在模块内,还是在模块外调用,结果总会引用这个唯一过程.如果过程仅出现在一个地方,这个过程就是唯一的.如果两个以上的模块都包含同名的过程,那就有必要用模块名来限定了.在同一模块内调用一个公共过程就会运行该模块内的过程.例如,对于Module1 和 Module2 中名为 CommonName 的过程,从 Module2 中调用CommonName 则运行 Module2 中的CommonName过程,而不是 Module1中的 Co

vb变量、常数和数据类型及过程概述(四)

Numeric 数据类型Visual Basic 支持几种 Numeric 数据类型:Integer(整型).Long(长整型).Single(单精度浮点型).Double(双精度浮点型)和 Currency(货币型).与 Variant 类型相比,Numeric 类型占用的存储空间通常要少.如果知道变量总是存放整数(如 12 )而不是带小数点的数字(如 3.57),就应当将它声明为 Integer 类型或 Long 类型.整数的运算速度较快,而且比其它数据类型占据的内存要少.在 For...N

vb变量、常数和数据类型及过程概述(二)

模块内部使用的变量按照缺省规定,模块级变量对该模块的所有过程都可用,但对其它模块的代码不可用.可在模块顶部的声明段用 Private 关键字声明模块级变量,从而建立模块级变量.例如:Private intTemp As Integer在模块级,Private 和 Dim 之间没有什么区别,但 Private 更好些,因为很容易把它和 Public 区别开来,使代码更容易理解. 所有模块使用的变量为了使模块级的变量在其它模块中也有效,用 Public 关键字声明变量.公用变量中的值可用于应用程序的

vb变量、常数和数据类型及过程概述(十一)

提供可选参数的缺省值 也可以给可选参数指定缺省值.在下例中,如果未将可选参数传递到函数过程,则返回一个缺省值.Sub ListText(x As String, Optional y As _Integer = 12345)List1.AddItem xList1.AddItem yEnd Sub Private Sub Command1_Click ()strName = "yourname" '未提供第二个参数.Call ListText (strName) '添加"yo

vb变量、常数和数据类型及过程概述(五)

Object 数据类型Object 变量作为 32 位(4 个字节)地址来存储,该地址可引用应用程序中或某些其它应用程序中的对象.可以随后(用 Set 语句)指定一个被声明为 Object 的变量去引用应用程序所识别的任何实际对象.Dim objDb As ObjectSet objDb = OpenDatabase ("c:\Vb5\Biblio.mdb")在声明对象变量时,请试用特定的类,而不用一般的 Object(例如用 TextBox而不用 Control,或者像上面的例子那样

vb变量、常数和数据类型及过程概述(八)

用循环操作数组可以用 For 循环嵌套有效的处理多维数组.例如,在 MatrixA 中基于每个元素在数组中的位置为其赋值:Dim I As Integer, J As IntegerStatic MatrixA(1 To 10, 1 To 10) As DoubleFor I = 1 To 10For J = 1 To 10MatrixA (I, J) = I * 10 + JNext JNext I详细信息 关于循环的详细信息,请参阅本章后面的"循环结构"部分. 动态数组数组到底应该