内存数据类型

数据类型在 数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。 变量是用来存储值的所在处;它们有名字和数据类型。 变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明 变量时也可指定它的数据类型。所有 变量都具有数据类型,以决定能够存储哪种数据。
中文名
数据类型

1原理编辑

数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。 例如大胖子必须睡双人床,就给他双人床,瘦的人单人床就够了。
根据缺省规定,如果在声明中没有说明数据类型,则令 变量的数据类型为 Variant。Variant 数据类型很像一条变色龙— 它可在不同场合代表不同数据类型。当指定 变量为 Variant 变量时,不必在数据类型之间进行转换,Visual Basic 会自动完成各种必要的转换。
但是,如果知道 变量确实总是存储特定类型的数据,并且还声明了这种特定类型的变量,则 Visual Basic 会以更高的效率处理这个数据。例如,存储人名的 变量最好表示成 String 数据类型,因为名字总是由 字符组成。
变量外,数据类型也用于其它场合。在给 属性赋值时,这个值就有数据类型; 函数的参数也有数据类型。事实上,在 Visual Basic 中,凡是与 数据有关的东西就与数据类型有关。
声明变量
  • 在使用非 Variant 变量之前,必须使用 Private、Public、Dim 或 Static 语句变量声明为 As type。例如,下列 语句分别声明了 Integer、Double、String 和 Currency 类型的 变量
?
1
2
3
4
PrivateIAsInteger
DimAmtAsDouble
StaticYourNameAsString
PublicBillsPaidAsCurrency
  • 一个声明 语句可将多个声明组合起来,请看下列语句:
?
1
2
3
4
PrivateIAsInteger,AmtAsDouble
PrivateYourNameAsString,BillsPaidAsCurrency
PrivateTest,Amount,JAsInteger
'注意,在这里Test和Amount是Variant数据类型,只有J是Integer数据类型
注意 如果不提供数据类型,则指定 变量为缺省类型。如上例中注释已说明,如果由于其它 编程语言的经验使人感到同一个声明 语句中的所有 变量都有相同的指定数据类型(此例中为 Integer),那么,此处的结果可能会令人感到新鲜。

2种类编辑

数字型

Visual Basic 支持几种 Numeric 数据类型— Integer( 整型)、Long( 长整型)、Single( 单精度浮点型)、Double( 双精度浮点型)和 Currency(货币型)。与 Variant 类型相比,Numeric 类型占用的 存储空间通常要少。
如果知道 变量总是存放整数(如 12 )而不是带小数点的 数字(如 3.57),就应当将它声明为 Integer 类型或 Long 类型。整数的运算速度较快,而且比其它数据类型占据的内存要少。在 For...Next 循环内作为计数器 变量使用时,整数类型尤为有用。
关于控制结构的详细资料(取值范围,储存空间等),请参阅本词条后面的“数据类型概述”。
如果 变量包含小数,则可将它们声明为 Single、Double 或 Currency 变量。Currency 数据类型支持小数点右面 4 位和小数点左面 15 位;它是一个精确的定点数据类型,适用于货币计算。浮点(Single 和 Double)数比 Currency 的有效范围大得多,但有可能产生小的进位误差。
浮点数值可表示为 mmmEeee 或 mmmDeee ,其中 mmm 是假数,而 eee 是指数(以 10 为底的幂)。Single 数据类型的最大正数值为 3.402823E+38,或 3.4 乘以 10 的 38 次方;Double 数据类型的最大正数值是 1.79769313486232D+308 或 1.8 乘以 10 的 308 次方。用 D 将数值文字中的假数部分和指数部分隔开,就会导致将该值作为 Double 数据类型来处理。同样,用这种方式使用 E,也会导致将该值作为 Single 数据类型来处理。

字节型

如果 变量包含二进制数,则将它声明为 Byte 数据类型的 数组。(本章后面的“ 数组”中将讨论数组)。在转换格式期间用 Byte 变量存储二进制数据就可保留数据。当 String 变量在 ANSI 和 Unicode 格式间进行转换时,变量中的任何二进制数据都会遭到破坏。在下列任何一种情况下,Visual Basic 都会自动在 ANSI 和 Unicode 之间进行转换。
除一元减法外,所有可对整数进行操作的 运算符均可操作 Byte 数据类型。因为 Byte 是从 0 - 255 的无符号类型,所以不能表示负数。因此,在进行一元减法运算时,Visual Basic 首先将 Byte 转换为符号整数。
所有数值 变量都可相互赋值,也可对 Variant 类型变量赋值。 在将浮点数赋予整数之前, Visual Basic要将浮点数的小数部分四舍五入,而不是将小数部分去掉。

文本型

如果 变量总是包含字符串而从不包含数值,就可将其声明为 String 类型。
?
1
PrivateSAsString
然后可将字符串赋予这个变量,并用 字符串函数对它进行操作。
?
1
2
S= "Database"
S=Left(S,4)
按照缺省规定,String 变量或参数是一个可变 长度的字符串,随着对字符串赋予新数据,它的长度可增可减。 也可以声明字符串具有固定 长度。可用以下 语法声明一个定长字符串:
?
1
String *size
例如,为了声明一个 长度为 50 字符的字符串,可用下列 语句
?
1
DimEmpNameAsString*50
如果赋予字符串的字符少于 50 个,则用空格将 EmpName 的不足部分填满。如果赋予字符串的 长度太长,已不能成为定长字符串,则 Visual Basic 会直接截去超出部分的字符。
因为定长字符串用空格填充尾部多余的空间,所以在处理定长字符串时可发现,删除空格的 Trim 和 RTrim 函数是很有用的。
可将 标准模块中的定长字符串声明为 Public 或 Private。在 窗体类模块中,必须将定长字符串声明为 Private。

3操作方法编辑

转换

如果字符串表示数值,则可将字符串赋予数值 变量。也可将数值赋予字符串 变量。例如,将 命令按钮文本框和列表框放置在 窗体中。在 命令按钮的 Click 事件中输入下列代码。运行 应用程序并单击 命令按钮
?
1
2
3
4
5
6
7
8
9
10
PrivateSubCommand1_Click()
DimintXAsInteger
DimstrYAsString
strY= "100.23"
intX=strY '将字符串传递给数值变量。
List1.AddItemCos(strY) '将字符串中数值的余弦值。
'添加到列表框中。
strY=Cos(strY) '将余弦值传递给字符串变量。
Text1.Text=strY '在文本框中显示字符串。
EndSub
Visual Basic 会自动强制 变量为适当的数据类型。在转换字符串和数值时要小心;如果传送字符串中的值不是数值,则在运行时会出错。
逻辑型
变量的值只是“true/false”、“yes/no”、“on/off”信息,则可将它声明为 Boolean 类型。Boolean 的 缺省值为 False。在下面的例子中,blnRunning 是 Boolean 变量,存储简单的 yes/no 设置。
?
1
2
3
4
5
DimblnRunningAsBoolean
'查看磁带是否在转。
IfRecorder.Direction=1Then
blnRunning= True
Endif
日期型
Date 和 Time 值既可包含在特定的 Date 数据类型中,又可包含在 Variant 变量中。一般的 Date 特性适用于这两种类型。
详细信息 请参阅《联机手册》的“高级 变量主题”中的“在 Variant 变量中存储 Date/Time 值”部分。
当其它数值数据 类型转换为 Date 时,小数点左边的值表示 Date 信息,小数点右边的值则代表 Time。午夜为 0,正午为 0.5。负数表示公元 1899 年 12 月 31 日之前的 Date。
对象型
Object 变量作为 32 位(4 个 字节)地址来存储,该地址可引用 应用程序中或某些其它 应用程序中的 对象。可以随后(用 Set 语句)指定一个被声明为 Object 的 变量去引用应用程序所识别的任何实际 对象
?
1
2
DimobjDbAsObject
SetobjDb=OpenDatabase( "c:\Vb5\Biblio.mdb" )
在声明 对象 变量时,请试用特定的类,而不用一般的 Object(例如用 TextBox 而不用 Control,或者象上面的例子那样,用 Database 取代 Object)。运行 应用程序之前,Visual Basic 可以决定引用特定类型 对象属性和方法。因此, 应用程序在运行时速度会更快。在“ 对象浏览器”中列举了特定的类。
当使用其它 应用程序对象,并在“ 对象浏览器”中的“类”列表中列举对象时,不要用 Variant 或一般的 Object,而应声明对象。这样可确保 Visual Basic 能够识别引用的特定类型 对象,在运行时解决引用问题。
详细信息 关于创建和指定 对象以及对象 变量的更详细信息,请参阅本章后面的“创建对象”部分。
Visual Basic 提供了几种 转换函数,可用来将值转换成特定数据类型。例如,用 CCur 函数将值转换成 Currency 类型:
PayPerWeek = CCur (hours * hourlyPay)
转换函数
将表达式转换成
Cbool
Boolean
Cbyte
Byte
Ccur
Currency
Cdate
Date
CDbl
Double
Cint
Integer
CLng
Long
Single
CStr
String
Cvar
Variant
CVErr
Error
对目标数据类型,传递到 转换函数的值必须是有效的,否则会发生错误。例如,如果想把 Long 型数转换成 Integer 型数,那么,Long 型数必须在 Integer 数据类型的有效范围之内。
相关信息请查阅本词条后面的 "数据类型概述"
变体型
概述
Variant 变量能够存储所有 系统定义类型的数据。如果把它们赋予 Variant 变量,则不必在这些数据的类型间进行转换; Visual Basic 会自动完成任何必要的转换。例如:
?
1
2
3
4
DimSomeValue '缺省为Variant。
SomeValue= "17" 'SomeValue包含"17"(双字符的串)。
SomeValue=SomeValue-15 '现在,SomeValue包含数值2。
SomeValue= "U" &SomeValue '现在,SomeValue包含"U2"(双字符的串)。
不必过多关注 Variant 变量 中数据的类型就可对 Variant 变量进行操作,但须避免落入陷阱。
如果对 Variant 变量进行 数学运算或 函数运算,则 Variant 必包含某个数。更详细的信息,请参阅《联机手册》中“高级 变量主题”中的“变量中存储的 Numeric 值”部分。
如果正在连接两个字符串,则用 " & " 操作符而不用 " + " 操作符。更详细的信息,请参阅《联机手册》中“高级 变量主题”中的“Variant 变量中存储的 Strings”部分。
除了可以像其它标准数据类型一样操作外,Variants 还包含三种特定值:Empty,Null 和 Error。

定植

Empty 值
有时需要知道是否已将一个值赋予所创建的 变量。在赋值之前,Variant 变量具有值 Empty。值 Empty 是异于0、零 长度字符串 ("") 或 Null 值的特定值。可用 IsEmpty 函数测试 Empty 值:
?
1
IfIsEmpty(Z)ThenZ=0
当 Variant 变量包含 Empty 值时,可在 表达式中使用它;将其作为 0 或零 长度字符串来处理,这要根据表达式来定。
只要将任何值(包括 0、零 长度字符串或 Null)赋予 Variant 变量,Empty 值就会消失。而将关键字 Empty 赋予 Variant 变量,就可将 Variant 变量恢复为 Empty。
Null 值
Variant 数据类型还可包含一特定值:Null。Null通常用于数据库应用 程序,表示未知数据或丢失的数据。 由于在数据库中使用 Null 方法,Null 具有某些唯一的特性:
对包含 Null 的 表达式,计算结果总是 Null。于是说 Null 通过 表达式“传播”;如果表达式的部分之值为 Null,那么整个表达式的值也为 Null。
将 Null 值、含 Null 的 Variant 变量或计算结果为 Null 的表达式作为 参数传递给大多数 函数,将会使函数返回 Null。
Null 值经由返回 Variant 数据类型的内在 函数传播。
也可用 Null 关键字指定 Null 值。
?
1
Z=Null
也可用 IsNull 函数测试 Variant 变量是否包含 Null 值。
?
1
2
3
4
5
IfIsNull(X)AndIsNull(Y) Then
Z=Null
Else
Z=0
EndIf
如果将 Null 值赋予 Variant 以外的任何其它类型 变量,则将出现可以捕获的错误。而将 Null 值赋予 Variant 则不会发生错误,Null 将通过包含 Variant 变量的 表达式传播(尽管 Null 并不通过某些 函数来传播)。可以从任何具有 Variant 返回值的 函数过程返回 Null。
除非明确将 Null 赋予 变量,否则变量不会设置成 Null 值,所以,如果不在 应用程序中使用 Null,就不必书写测试 Null 和处理 Null 的程序。
详细信息 关于如何在 表达式中使用 Null 的详细信息,请参阅语言参考的“Null”部分。
Error 值
在 Variant 中,Error 是特定值,指出已发生的过程中的错误状态。但是,与其它类型错误不同,这里并未发生正常的 应用程序级的错误处理。因此, 程序员应用程序本身可根据 Error 值进行取舍。利用 CVErr 函数将实数转换成 错误值就可建立 Error 值。
详细信息 关于如何在表达式中使用 Error 值,请参阅语言参考中的“CVErr 函数”部分。关于错误处理的信息,请参阅“调试代码和处理错误”。有关 Variant 数据类型的更详细信息,请参阅《联机手册》中的“高级变量主题”。
存储空间大小与范围
以下表格显示所支持的数据类型,以及存储空间大小与范围。
数据类型
  
储存空间大小(单位:字节)范围
Byte10 - 255
Boolean2True 或 False
Integer2-32,768 ~ 32767
Long(长整形)
4-2,147,483,648 ~ 2,147,483,647
Single
4
负数范围:
-3.402823E38 ~ -1.401298E-45
正数范围:
1.401298E-45 ~ 3.402823E38
Double
8
负数范围:
-1.797,693,134,862,32E308 ~
-4.940,656,458,412,47E-324
正数范围:
4.940,656,458,412,47E-324 ~
1.797,693,134,862,32E308
Currency
(变比整形 / 货币类型)
8
-922,337,203,685,477.5808 ~
922,337,203,685,477.5807
Decimal14
没有小数点时:
+/-79,228,162,514,264,337,593,543,950,335
有小数点时:
+/-7.922,816,251,426,433,759,354,395,033,5
最小的非零值:
+/-0.000,000,000,000,000,000,000,000,000,1
Date8100 年 1 月 1 日 ~ 9999 年 12 月 31 日
Object4任何 Object 引用
String (变长)10长度从 0 到 大约 20 亿
String (定长)10长度从 1 到大约 65,400
Variant (数字)16任何数字值,最大可达 Double 的范围
Variant (字符)22与字符串长度,变长 String 有相同的范围
用户自定义变量--
任何数据类型的 数组都需要 20 个 字节的内存空间,加上每一数组维数占 4 个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用 数据元数目乘上每个元素的大小加以计算。例如,以 4 个 2 字节之 Integer 数据元所组成的一维 数组中的数据,占 8 个字节。这 8 个 字节加上额外的 24 个字节,使得这个 数组所需总内存空间为 32 个字节。
包含一 数组的 Variant 比单独的一个数组需要多 12 个 字节
定类,定序;定比;定距
VF辅导:内存变量操作命令及文件操作命令 来源:学生大 2007年11月01日 11:35   一.内存变量操作命令:   1.显示内存变量:   格式:display memory [to printer][to 文本文件名]或      list memory [to printer][to 文本文件名]   说明:   (1).两条命令功能基本相同,仅在显示方式上有所区别,前者是分页显示,后者以滚动方式显示   (2).该命令用于显示已定义的内存变量   (3).加上to printer选项,将在屏幕上显示的同时,送往打印机打印   (4).也可加上"to 文本文件名"选项,在显示的同时将结果传送给指定的文本文件保存.   例:显示已存的内存变量   在命令窗口依次输入执行以下命令,观察结果   m=123.456   n="中国人"   list memory to e:\myvfp\bl.txt   执行完毕后,打开e:\myvfp,可以看到,里面多了一个b1.txt.   2.清除内存变量:   格式1:release 变量名表   格式2:release all [extended]   格式3:clear memory   说明:   (1).格式1清除变量名表指定的内存变量并释放它们所战胜的内存空间.   (2).格式2清除全部内存变量,但在程序中不清除全程变量,如有extended选项,则全程变量也清除.   (3).格式3清除除系统内存变量外的全程和局部内存变量,并释放它们的内存空间.   3.保存内存变量:   格式:save to 文件名   功能:将内存变量保存到指定的文件中   4.恢复内存变量:   格式:restore from 文件名   功能:从指定的文件中恢复内存变量   二.文件操作命令:vfp提供了许多文件操作命令,如文件的查找,打开,关闭,复制,更名及显示等.如果你不dos基础,你会发现,和dos命令有几分相象的.   1.显示文件目录命令:   格式:dir [盘符][路径][to printer]   例如:   dir e:  &&显示e:的表信息的内容   dir *.prg  &&显示当前盘的当前目录下所有扩展名为.prg的文件目录信息    2.关闭文件:   格式1:close all   格式2:close database   格式3:close database all   格式4:close index   格式5:close tables   功能:   (1).格式1关闭除"命令窗口","调试窗口","跟踪窗口"及"帮助窗口"以外的所有内容.   (2).格式2关闭当前数据库.数据库关闭后,与此数据库相关的东西同时关闭.若没有数据库,则该命令关闭所有工作区中打开的自由表及与此表相关的东西.   (3).格式3关闭所有打开的数据库及与此相关的东西.   (4).格式4关闭除结构化复合索引外的所有索引文件.   (5).格式5关闭所有打开的表及其索引文件,但不关闭数据库.   3.文件的复制:   格式:copy file 文件名1 to 文件名2   说明:   (1).该命令可复制任何类型的文件,但要求文件名必须加扩展名;   (2).该命令不能复制已打开的文件.   例:将d盘根目录下的xy子目录中的as.prg复制到A盘上,文件名不变:   copy file d:\xy\as.prg to a:\as.prg   4.文件更名:   格式:rename 文件名1 to 文件名2   说明:该命令用于给磁盘文件改名,文件名一般应带扩展名.如果文件不在当前目录中,应指定扩展名.对已打开的文件不能改名.改名的同时可以更换存放路径,例如:rename d:\xy\as.prg to e:\as1.prg   5.删除文件:   格式1:erase 文件名|   格式2:delete file 文件名|   说明:   (1).这两个命令都用于删除文件,完全相同.被删除的文件应事先关闭,文件名应带扩展名.如被删除的文件不在当前目录下,应指定路径名.在文件名不不允许使用通配符.   (2).若选用问号"?",半打开对话框,可从中选择要删除的文件进行删除操作.例如,在命令窗口输入erase 回车,将弹出对话框.   6.显示文本文件:   格式:type 文本文件名 [to printer|to 输出文件名]   功能:执行该命令,将文本文件的内容输出到屏幕,窗口,打印机或一个文本文件中.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值