程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> VisualBasic變量、常數和數據類型及過程概述四

VisualBasic變量、常數和數據類型及過程概述四

編輯:VB綜合教程

  Variant變量中存儲的Objects
  可以將Objects存儲在Variant變量中。當需要高效地處理包括Objects在內的各種數據類型時,這可能十分有用。例如,一個數組中的所有元素都必須具有相同的數據類型。將數組的數據類型設置成Variant就可將Objects連同其它數據類型一起存入同一個數組中。
  
  數組
  如果有過用其它語言編程的經歷,那麼想必會熟悉數組的概念。由於有了數組,可以用相同名字引用一系列變量,並用數字(索引)來識別它們。在許多場合,使用數組可以縮短和簡化程序,因為可以利用索引值設計一個循環,高效處理多種情況。數組有上界和下界,數組的元素在上下界內是連續的。因為VisualBasic對每一個索引值都分配空間,所以不要不切實際聲明一個太大的數組。
  注意這一部分討論的數組是程序中聲明的變量數組。它們不同於控件數組,控件數組是在設計時通過設置控件的Index屬性規定的。變量數組總是連續的;與控件數組不同的是,不能從一個數組的中部加載或卸載數組元素。
  一個數組中的所有元素具有相同的數據類型。當然,當數據類型為Variant時,各個元素能夠包含不同種類的數據(對象、字符串、數值等等)。可以聲明任何基本數據類型的數組,包括用戶定義的類型(請參閱第八章“再論編程”中的“創建自己的數據類型”)和對象變量(請參閱第九章“用對象編程”)。
  在VisualBasic中有兩種類型的數組:固定大小的數組——它總是保持同樣的大小,以及在運行時大小可以改變的動態數組。在本章後面的“動態數組”中將要詳細討論動態數組。
  
  聲明固定大小的數組
  有三種方法聲明固定大小的數組,用哪一種方法取決於數組應有的有效范圍:
   建立公用數組,在模塊的聲明段用Public語句聲明數組。
   建立模塊級數組,在模塊的聲明段用Private語句聲明數組。
   建立局部數組,在過程中用Private語句聲明數組。
  
  設定上下界
  聲明數組時,在數組名之後跟一個用括號括起來的上界。上界不得超過Long數據類型的范圍(-2,147,483,648到2,147,483,647)。例如,下列數組聲明可出現在模塊的聲明段:
  DimCounters(14)AsInteger  '15個元素。
  DimSums(20)AsDouble   '21個元素。
  為建立公用數組,直接用Public取代Dim。
  PublicCounters(14)AsInteger
  PublicSums(20)AsDouble
  在過程之中同樣的聲明使用Dim:DimCounters(14)AsIntegerDimSums(20)AsDouble第一個聲明建立了一個有15個元素的數組,其索引號從0到14。第二個聲明建立了一個有21個元素的數組,其索引號從0到20。缺省的下界為0。
  為了規定下界,用關鍵字To顯式提供下界(為Long數據類型):
  DimCounters(1To15)AsInteger
  DimSums(100To120)AsString
  在前述聲明中,Counters的索引值范圍從1到15,而Sums的索引值范圍從100到120。
  
  包含其它數組的數組
  有可能建立Variant數據類型數組,並與不同數據類型的數組共居一處。以下代碼建立兩個數組,一個包含整數,而另一個包含字符串。然後聲明第三個Variant數組,並將整數和字符串數組放置其中:
  PrivateSubCommand1_Click()
    DimintXAsInteger   '聲明計數器變量。
    '聲明並放置整數數組。
    DimcountersA(5)AsInteger
    ForintX=0To4
    countersA(intX)=5
    NextintX
    '聲明並放置字符串數組。
    DimcountersB(5)AsString
    ForintX=0To4
    countersB(intX)="hello"
    NextintX
    DimarrX(2)AsVariant  '聲明擁有兩個成員的新數組。
    arrX(1)=countersA()  '將其它數組移居到數組。
    arrX(2)=countersB()
    MsgBoxarrX(1)(2)  '顯示每一個數組的成員。
    MsgBoxarrX(2)(3)
   EndSub
  
  多維數組
  有時需要追蹤記錄數組中的相關信息。例如,為了追蹤記錄計算機屏幕上的每一個像素,需要引用它的X、Y坐標。這時應該用多維數組存儲值。可用VisualBasic聲明多維數組。例如,下面的語句聲明了一個過程內的10×10的二維數組。
  StaticMatrixA(9,9)AsDouble
  可用顯式下界來聲明兩個維數或兩個維數中的任何一個:
  StaticMatrixA(1To10,1To10)AsDouble
  可以將所有這些推廣到二維以上的數組。例如:
  DimMultiD(3,1To10,1To15)
  這個聲明建立了三維數組,大小為4×10×15。元素總數為三個維數的乘積,為600。
  注意在增加數組的維數時,數組所占的存儲空間會大幅度增加,所以要慎用多維數組。使用Variant數組時更要格外小心,因為它們需要更大的存儲空間。
  
  用循環操作數組
  可以用For循環嵌套有效的處理多維數組。例如,在MatrixA中基於每個元素在數組中的位置為其賦值:
  DimIAsInteger,JAsInteger
  StaticMatrixA(1To10,1To10)AsDouble
  ForI=1To10
     ForJ=1To10
     MatrixA(I,J)=I*10 J
     NextJ
  NextI
  詳細信息關於循環的詳細信息,請參閱本章後面的“循環結構”部分。
  
  動態數組
  數組到底應該有多大才合適,有時可能不得而知。所以希望能夠在運行時具有改變數組大小的能力。
  動態數組就可以在任何時候改變大小。在VisualBasic中,動態數組最靈活、最方便,有助於有效管理內存。例如,可短時間使用一個大數組,然後,在不使用這個數組時,將內存空間釋放給系統。
  如果不用動態數組,就要聲明一個數組,它的大小盡可能達到最大,然後再抹去那些不必要的元素。但是,如果過度使用這種方法,會導致內存的操作環境變慢。
  要創建動態數組,請按照以下步驟執行:
  1.(如果希望數組為公用數組,則)用Public語句聲明數組,或者(如果希望數組為模塊級,則)在模塊級用Dim語句聲明數組,或者(如果希望數組為局部數組,則)在過程中用Static或Dim語句聲明數組。給數組附以一個空維數表,這樣就將數組聲明為動態數組。
   DimDynArray()
  2.用ReDim語句分配實際的元素個數。
   ReDimDynArray(X 1)
  ReDim語句只能出現在過程中。與Dim語句、Static語句不同,ReDim語句是一個可執行語句,由於這一語句,應用程序在運行時執行一個操作。ReDim語句支持這樣的語法,它與固定數組中使用的語法相同。對於每一維數,每個ReDim語句都能改變元素數目以及上下界。但是,數組的維數不能改變。
  ReDimDynArray(4to12)
  例如,用第一次聲明在模塊級所建立的動態數組Matrix1:
  DimMatrix1()AsInteger
  然後,在過程中給數組分配空間:
  SubCalcValuesNow()
  .
  .
  .
    ReDimMatrix1(19,29)
  EndSub
  這裡的ReDim語句給Matrix分配一個20×30的整數矩陣(元素總大小為600)。還有一個辦法,用變量設置動態數組的邊界:
  ReDimMatrix1(X,Y)
  注意您可以將字符串賦值給大小可變的字節數組。一個字節數組也可以被賦值給一個可變長的字符串。一定要注意字符串中的字節數會隨平台而變化。同一個字符串在Unicode平台上的字節數是它在非Unicode平台上的兩倍。
  
  保留動態數組的內容
  每次執行ReDim語句時,當前存儲在數組中的值都會全部丟失。VisualBasic重新將數組元素的值置為Empty(對Variant數組)、置為0(對Numeric數組)、置為零長度字符串(對String數組)或者置為Nothing(對於對象的數組)。
  在為新數據准備數組,或者要縮減數組大小以節省內存時,這樣做是非常有用的。有時希望改變數組大小又不丟失數組中的數據。使用具有Preserve關鍵字的ReDim語句就可做到這點。例如,使用UBound函數引用上界,使數組擴大、增加一個元素,而現有元素的值並未丟失:
  ReDimPreserveDynArray(UBound(DynArray) 1)
  在用Preserve關鍵字時,只能改變多維數組中最後一維的上界;如果改變了其它維或最後一維的下界,那麼運行時就會出錯。所以可這樣編程:
  ReDimPreserveMatrix(10,UBound(Matrix,2) 1)
  而不可這樣編程:
  ReDimPreserveMatrix(UBound(Matrix,1) 1,10)
  詳細信息關於動態數組的更詳細信息,請參閱語言參考中的“ReDim函數”。關於對象數組,請參閱第九章“用對象編程”。
  

->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved