[glow=570,#8B008B,6]Visual Basic 關於變數[/glow]
資料型態摘要
資料型態
為一種變數的特性,用來決定可存放何種資料。資料型態包括有 Byte、Boolean、Integer、Long、Currency、Decimal、Single、Double、Date、String、Object、Variant ( 預設 ) 和使用者自訂型態等。
以下表格顯示所支援的資料型態,以及儲存空間大小與範圍。
資料型態 儲存空間大小 範圍
Byte 1 個位元組 0 到 255
Boolean 2 個位元組 True 或 False
Integer (%) 2 個位元組 -32,768 到 32,767
Long (&)
(long integer) 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 個位元組 January 1, 100 到 December 31, 9999
Object 4 個位元組 任何 Object 引用
String
(可變長度字串) 10 位元組加字串長度 0 到大約 20 億
String ($)
(固定長度字串) 字串長度 1 到大約 65,400
Variant
(數值) 16 個位元組 任何數值,最大可達 Double 的範圍
Variant
(字元) 22 個位元組 加字串長度 與變動長度 String 有相同的範圍
使用者定義
(利用 Type) 元件所需數目 每個元件的範圍與它本身的資料資料型態的範圍相同。
附註 任何資料型態的陣列需要 20 個位元組的記憶體空間、陣列維數佔 4 個位元組,再加上資料本身所佔的空間。資料所佔的記憶體空間可以資料元件數目乘上每個元件的大小加以計算。例如,以 4 個 2 位元組之 Integer 資料元件所組成之一維陣列中的資料,每個佔 8 個位元組。此資料所需之 8 個位元組加上額外之 24 位元組,使得這個陣列所需總記憶體空間為 32 個位元組。
有一陣列的 Variant 比單獨的一個陣列需要多 12 個位元組。
陣列
一個連續可索引且同本質的元件所成的集合,每一陣列中的元件皆有單一的索引數字,更改其中某元件並不會影響到其他元件。
如果您有其它撰寫程式語言的經驗,則可能會較熟悉陣列的觀念。由於有了陣列,您可以用相同名字去引用一系列的變數,並用數字 (索引) 來識別它們。在許多場合,使用陣列可以讓您縮短和簡化程式碼;因為您可以利用索引值設計一個迴圈,以便更有效率地處理各種情況。陣列有上界和下界,並且陣列元件的索引值在上下界之間是連續的。因為 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 Integer
Dim 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 到 200。
包含其它陣列的陣列
您有可能會建立 Variant 資料型態的陣列,並包含不同資料型態的陣列在其內。以下程式碼會建立兩個陣列,一個包含整數,而另一個包含字串。然後宣告第三個 Variant 陣列,並將整數和字串陣列放置其中:
Private Sub Command1_Click ()
Dim intX As Integer ' Declare counter variable.
' 宣告整數陣列並填入整數。
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 陣列時更要格外小心,因為它們比其它資料型態需要更大的儲存空間。
使用迴圈操作陣列
您可以用巢狀的 For 迴圈來更有效率地處理多維陣列。舉例而言,下列的陳述式會將 MatrixA中的每個元件初始成它在陣列中的位置:
Dim I As Integer, J As Integer
Static MatrixA(1 To 10, 1 To 10) As Double
For I = 1 To 10
For J = 1 To 10
MatrixA (I, J) = I * 10 + J
Next J
Next I