數據類型

數據類型

數據類型在數據結構中的定義是一個值的集合以及定義在這個值集上的一組操作。

變數是用來存儲值的所在處,它們有名字和數據類型。變數的數據類型決定了如何將代表這些值的位存儲到計算機的記憶體中。在聲明變數時也可指定它的數據類型。所有變數都具有數據類型,以決定能夠存儲哪種數據。

數據類型包括原始類型、多元組、記錄單元、代數數據類型、抽象數據類型、參考類型以及函式類型。

  • 中文名稱
    數據類型

基本簡介

數據類型在數據結構中的定義是一個值的集合以及定義在這個值集上的一組操作。 變數是用來存儲值的所在處;它們有名字和數據類型。變數的數據類型決定了如何將代表這些值的位存儲到計算機的記憶體中。在聲明變數時也可指定它的數據類型。所有變數都具有數據類型,以決定能夠存儲哪種數據。            

數據類型數據類型

根據預設規定,如果在聲明中沒有說明數據類型,則令變數的數據類型為 Variant。Variant 數據類型很象一條變色龍— 它可在不同場合代表不同數據類型。當指定變數為 Variant 變數時,不必在數據類型之間進行轉換,Visual Basic 會自動完成各種必要的轉換。

但是,如果知道變數確實總是存儲特定類型的數據,並且還聲明了這種特定類型的變數,則 Visual Basic 會以更高的效率處理這個數據。例如,存儲人名的變數最好表示成 String 數據類型,因為名字總是由字元組成。

除變數外,數據類型也用於其它場合。在給屬性賦值時,這個值就有數據類型;函式的參數也有數據類型。事實上,在 Visual Basic 中,凡是與數據有關的東西就與數據類型有關。

也可聲明任何基本類型的數組。

詳細信息 關於更詳細信息,請參閱本章後面的“數組”部分。在“性能和兼容性的設計”中還將討論通過選擇數據類型來提高應用程式的性能。

數據類型

Numeric數據類型

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 數據類型的數組。(本章後面的“數組”中將討論數組)。在轉換格式期間用 Byte 變數存儲二進制數據就可保留數據。當 String 變數在 ANSI 和 Unicode 格式間進行轉換時,變數中的任何二進制數據都會遭到破壞。在下列任何一種情況下,Visual Basic 都會自動在 ANSI 和 Unicode 之間進行轉換:

讀檔案時

寫檔案時

調用 DLL 時

調用對象的方法和屬性時

除一元減法外,所有可對整數進行操作的運算符均可操作 Byte 數據類型。因為 Byte 是從 0 - 255 的無符號類型,所以不能表示負數。因此,在進行一元減法運算時,Visual Basic 首先將 Byte 轉換為符號整數。

所有數值變數都可相互賦值,也可對 Variant 類型變數賦值。 在將浮點數賦予整數之前, Visual Basic要將浮點數的小數部分四捨五入,而不是將小數部分去掉。

詳細信息 關於 Unicode 和 ANSI 轉換的詳細信息,請參閱“國際化”。

String 數據類型

如果變數總是包含字元串而從不包含數值,就可將其聲明為 String 類型。

Private S As String

然後可將字元串賦予這個變數,並用字元串函式對它進行操作。

S = "Database"

S = Left (S,4)

按照預設規定,String 變數或參數是一個可變長度的字元串,隨著對字元串賦予新數據,它的長度可增可減。 也可以聲明字元串具有固定長度。可用以下語法聲明一個定長字元串:

String * size

例如,為了聲明一個長度為 50 字元的字元串,可用下列語句:

Dim EmpName As String * 50

如果賦予字元串的字元少於 50 個,則用空格將 EmpName 的不足部分填滿。如果賦予字元串的長度太長,已不能成為定長字元串,則 Visual Basic 會直接截去超出部分的字元。

因為定長字元串用空格填充尾部多餘的空間,所以在處理定長字元串時可發現,刪除空格的 Trim 和 RTrim 函式是很有用的。

可將標準模組中的定長字元串聲明為 Public 或 Private。在窗體和類模組中,必須將定長字元串聲明為 Private。

詳細信息 請參閱語言參考中的“Ltrim、RTrim Function 和 Trim 函式”。

Boolean 數據類型

變數的值只是“true/false”、“yes/no”、“on/off”信息,則可將它聲明為 Boolean 類型。Boolean 的預設值為 False。在下面的例子中,blnRunning 是 Boolean 變數,存儲簡單的 yes/no 設定。

Dim blnRunning As Boolean

'查看磁帶是否在轉。

If Recorder.Direction = 1 Then

blnRunning = True

End if

Date 數據類型

Date 和 Time 值既可包含在特定的 Date 數據類型中,又可包含在 Variant 變數中。一般的 Date 特性適用於這兩種類型。

詳細信息 請參閱《在線上手冊》的“高級變數主題”中的“在 Variant 變數中存儲 Date/Time 值”部分。

當其它數值數據類型轉換為 Date 時,小數點左邊的值表示 Date 信息,小數點右邊的值則代表 Time。午夜為 0,正午為 0.5。負數表示公元 1899 年 12 月 31 日之前的 Date。

Object 數據類型

Object 變數作為 32 位(4 個位元組)地址來存儲,該地址可引用應用程式中或某些其它應用程式中的對象。可以隨後(用 Set 語句)指定一個被聲明為 Object 的變數去引用應用程式所識別的任何實際對象。

Dim objDb As Object

Set objDb = OpenDatabase ("c:\Vb5\Biblio.mdb")

在聲明對象變數時,請試用特定的類,而不用一般的 Object(例如用 TextBox 而不用 Control,或者象上面的例子那樣,用 Database 取代 Object)。運行應用程式之前,Visual Basic 可以決定引用特定類型對象的屬性和方法。因此,應用程式在運行時速度會更快。在“對象瀏覽器”中列舉了特定的類。

當使用其它應用程式的對象,並在“對象瀏覽器”中的“類”列表中列舉對象時,不要用 Variant 或一般的 Object,而應聲明對象。這樣可確保 Visual Basic 能夠識別引用的特定類型對象,在運行時解決引用問題。

詳細信息 關於創建和指定對象以及對象變數的更詳細信息,請參閱本章後面的“創建對象”部分。

Variant 數據類型

概述

Variant 變數能夠存儲所有系統定義類型的數據。如果把它們賦予 Variant 變數,則不必在這些數據的類型間進行轉換; Visual Basic 會自動完成任何必要的轉換。例如:

Dim SomeValue '預設為 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 值:

If IsEmpty (Z) Then Z = 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 值。

Z = Null

也可用 IsNull 函式測試 Variant 變數是否包含 Null 值。

If IsNull (X) And IsNull (Y) Then

Z = Null

Else

Z = 0

End If

如果將 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 數據類型的更詳細信息,請參閱《在線上手冊》中的“高級變數主題”。

轉換數據

概述

Visual Basic 提供了幾種轉換函式,可用來將值轉換成特定數據類型。例如,用 CCur 函式將值轉換成 Currency 類型:

PayPerWeek = CCur (hours * hourlyPay)

轉換函式 將表達式轉換成

Cbool Boolean

Cbyte Byte

Ccur Currency

Cdate Date

CDbl Double

Cint Integer

CLng Long

CSng Single

CStr String

Cvar Variant

CVErr Error

注意

對目標數據類型,傳遞到轉換函式的值必須是有效的,否則會發生錯誤。例如,如果想把 Long 型數轉換成 Integer 型數,那么,Long 型數必須在 Integer 數據類型的有效範圍之內。

詳細信息 在在線上幫助中查找指定的轉換函式。

數據變數

在使用非 Variant 變數之前,必須使用 Private、Public、Dim 或 Static 語句將變數聲明為 As type。例如,下列語句分別聲明了 Integer、Double、String 和 Currency 類型的變數:

Private I As Integer

Dim Amt As Double

Static YourName As String

Public BillsPaid As Currency

一個聲明語句可將多個聲明組合起來,請看下列語句:

Private I As Integer,Amt As Double

Private YourName As String,BillsPaid As Currency

Private Test,Amount,J As Integer

注意 如果不提供數據類型,則指定變數為預設類型。在上例中,變數 Test 和 Amount 是 Variant 數據類型。如果由於其它程式語言的經驗使人感到同一個聲明語句中的所有變數都有相同的指定數據類型(此例中為 Integer),那么,此處的結果可能會令人感到新鮮。

其他資料

VB中的數據類型

概述

以下表格顯示所支持的數據類型,以及存儲空間大小與範圍。

數據類型 存儲空間大小 範圍

Byte 1 個位元組 0 到 255

Boolean 2 個位元組 True 或 False

Integer 2 個位元組 -32,768 到 32,767

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.79769313486232E308 到

-4.94065645841247E-324;正數時從4.94065645841247E-324 到 1.79769313486232E308

Currency

(變比整型) 8 個位元組 從 -922,337,203,685,477.5808 到 922,337,203,685,477.5807

Decimal 14 個位元組 沒有小數點時為 +/-79,228,162,514,264,337,593,543,950,335,而小數點右邊有 28 位數時為 +/-7.9228162514264337593543950335;最小的非零值為 +/-0.0000000000000000000000000001

Date 8 個位元組 100 年 1 月 1 日 到 9999 年 12 月 31 日

Object 4 個位元組 任何 Object 引用

String

(變長) 10 位元組加字元串長度 0 到大約 20 億

(定長) 字元串長度 1 到大約 65,400

Variant

(數字) 16 個位元組 任何數字值,最大可達 Double 的範圍

(字元) 22 個位元組加字元串長度 與變長 String 有相同的範圍

用戶自定義

(利用 Type) 所有元素所需數目 每個元素的範圍與它本身的數據類型的範圍相同。

注意

任何數據類型的數組都需要 20 個位元組的記憶體空間,加上每一數組維數占 4 個位元組,再加上數據本身所占用的空間。數據所占用的記憶體空間可以用數據元數目乘上每個元素的大小加以計算。例如,以 4 個 2 位元組之 Integer 數據元所組成的一維數組中的數據,占 8 個位元組。這 8 個位元組加上額外的 24 個位元組,使得這個數組所需總記憶體空間為 32 個位元組。

包含一數組的 Variant 比單獨的一個數組需要多 12 個位元組。

定類,定序;定比;定距    

相關詞條

相關搜尋

其它詞條