版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章Delphi高級數據類型Delphi程序設計教程(第3版)清華大學出版社楊長春主編5.1.1枚舉類型的定義與變量聲明1.枚舉類型的定義枚舉類型使用一組有限的標識符來表示一組連續(xù)的整數常數,它的值是有限的。枚舉類型的定義格式如下:type<類型名稱>=(<標識符1>,<標識符2>,…<標識符n>);5.1枚舉類型說明:(1)type是系統(tǒng)的保留字,表示定義高級數據類型的開始。(2)<標識符>表示該類型數據中的元素,圓括號中列出了該類型數據的所有取值,這些取值又稱為枚舉常量。(3)同一個枚舉常量不允許重復出現在同一個枚舉類型定義中,也不允許同時出現在不同的枚舉類型定義中。2.枚舉類型變量的聲明其聲明的格式與其他類型變量的聲明完全相同例如:VarC:Color;該語句聲明了一個枚舉類型Color的變量C。5.1.2枚舉類型的運算1.使用函數ObjectPascal為枚舉類型定義了5個枚舉函數,可以進行特殊的運算。說明:(1)枚舉類型定義語句中列出的每一個枚舉常量都對應一個唯一的序數(整數),稱為枚舉序數,在缺省情況下,列出的第一個枚舉常量對應枚舉系數0,以后依次為1、2、3…。枚舉函數
功能
調用格式
Ord求枚舉序數Ord(枚舉常量或枚舉變量)Pred求前趨值Pred(枚舉常量或枚舉變量)Succ求后繼值Succ(枚舉常量或枚舉變量)Low求第1個枚舉常量Low(枚舉類型名)High求最后1個枚舉常量High(枚舉類型名)(2)在定義枚舉類型時,排在某枚舉常量前一位的枚舉常量稱為該枚舉常量的前趨值,后一位的稱為后繼值。第一個枚舉常量沒有前趨值,最末一個枚舉常量沒有后繼值。(3)由于每個枚舉常量都對應一個枚舉系數,所以枚舉常量的序數可以進行算術運算,結果類型為整型。但枚舉常量之間不能直接進行算術運算,需要先轉換為枚舉序數。2.關系運算由于每個枚舉常量對應一個唯一的序數,因此可以在枚舉常量之間進行關系運算。如在上述定義中,sun<wed的值為真(true),fri>sat的值為假(false)。5.2.1子界類型的定義子界類型的定義格式如下:type<類型名稱>=<常量1>..<常量2>;說明:(1)<常量1>表示子界類型的下界,即最小值,<常量2>表示子界類型的上界,即最大值。子界的上下界必須屬于相同的順序類型,即它們應同時為整型、布爾型、字符型或同一個枚舉類型。(2)子界的上界必須不小于下界。5.2子界類型(3)子界的上下界所屬的數據類型即為子界的基類型,若子界的基類型為標準數據類型(整型、布爾型、字符型),則子界的上、下界可以直接使用該類型常量,若子界的基類型為枚舉類型,則必須先定義基類型(枚舉類型),再定義子界類型。5.2.2子界類型變量的聲明其聲明格式與其他類型變量的聲明完全相同,如下面的代碼聲明了一個上述子界類型month的變量ml和workday類型的變量wl:varml:month:wl:workday:5.2.3子界類型的運算子界類型所允許的運算與其基類型所允許的運算相同,如基類型為整型子界類型變量可以進行算術、關系等運算,而基類型為枚舉類型的子界類型變量僅能進行關系運算。集合結構是指具有相同性質的對象的全體,構成集合的每個對象稱為集合的元素。注意:(1)集合中的元素是互異的、無序的。(2)集合元素個數不能超過256個。(3)元素與集合的關系是“屬于”或“不屬于”,二者必取其一且僅取其一。5.3.1集合類型的定義其定義格式如下:type<類型名稱>=setof<基類型>;
5.3集合類型說明:(1)<基類型>表示集合中各元素的類型,可以是字符型、布爾型、枚舉型和子界等順序類型,不能是整型、實型和其他的構造類型。(2)若<基類型>為枚舉類型或子界類型,則必須先定義該基類型,再定義集合類型。(3)一個集合最多只能有256個元素。另外,只有有序的類型才能跟關鍵字setof.5.3.2集合變量的聲明其聲明格式與其他類型變量的聲明完全相同。5.3.3變量集合的取值集合變量不同其他變量,它不是一個單獨元素,而是一系列元素的一集合。集合變量的取值稱為集合值,其一般表現形式如下:[<元素1>,<元素2>,…,<元素n>]如果集合類型的基類型有n個元素,則該集合類型變量的取值有2n個,包括一個空集合([])。5.3.4集合類型的運算集合類型的數據可以進行3大類運算:一類是集合對集合的并、交、差運算,其結果為集合值;一類是集合的關系運算,其結果是邏輯值;一類是元素對集合的“屬于”運算,其結果也是邏輯值。運算名稱
表示方式
運算結果
是否滿足交換律
并運算S1+S2兩個集合中所有不重復元素組成的新集合是交運算S1*S2兩個集合所共有的元素組成的新集合是差運算S1-S2所有屬于S1但不屬于S2的元素的集合否相等運算S1=S2如果S1與S2所包含的元素完全相同,則結果為True,否則為False是不等運算S1<>S2如果S1與S2所包含的元素完全不同,則結果為True,否則為False是包含運算S1>=S2如果S2中的元素都在S1中,則結果為True,否則為False否被包含運算S1<=S2如果S1中的元素都在S2中,則結果為True,否則為False否屬于運算XinS1如果元素X與集合S1的基類型相同,且被包含在S1中,則結果為True,否則為False.否集合運算符具有不同的優(yōu)先級,如表所示:優(yōu)先級運算符操作數類型結果值類型高*集合集合中+集合集合低=、<>、>=、<=集合邏輯最低in左操作數為元素,右操作數為集合邏輯數組類型(Array)是一些具有相同類型的元素按一定順序組成的序列。數組中的每一個數據元素都可以通過數組名來存取,它們被順序安排在內存中的一段連續(xù)的區(qū)域中。ObjectPascal提供的數組分為靜態(tài)數組和動態(tài)數組。而記錄類型可以將不同的數據集中在一起,并作為一個整體進行操作。
5.4.1靜態(tài)數組靜態(tài)數組在程序初始化時必須分配內存單元,明確其固定的大小和元素的數據類型。5.4數組與記錄類型1.一維靜態(tài)數組數組通常分為為一維、二維和多維數組,定義一維靜態(tài)數組類型的格式為:type<數組類型名>=array[<下標類型>]of<基類型>;
ObjectPascal允許的下標的類型為整數類型、字符類型、布爾類型、子界類型、枚舉類型等,而元素的類型可以是任意的數據類型,并且在同一數組中,所有元素的數據類型必須相同。對于用戶定義的數據類型作為下標類型,在使用之前必須聲明。
要訪問數組中元素,可以用數組名加方括號,方括號內是元素的下標值,方括號內的下標值必須符合數組類型中下標類型的定義,其類型必須與下標類型一致,其值在下標取值范圍內。而且下標也可以是表達式。使用ObjectPascal提供的標準函數Low和high,可以返回一個數組的最小下標值和最大下標值,而函數Length可以返回數組的長度。2.二維靜態(tài)數組二維數組是指一個一維數組中的元素類型又是一個一維數組,其一般形式為:type<數組標識符>=Array[<下標類型1>]ofArray[<下標類型2>]of<基類型>;也可以把上述形式寫成下面的形式:type<數組標識符>=Array[<下標類型1>,<下標類型2>]of<基類型>;3.多維靜態(tài)數組多維靜態(tài)數組的一般格式:type<數組標識符>=Array[<下標類型1>,<下標類型2>,…<下標類型n>]of<基類型>;5.4.2動態(tài)數組動態(tài)數組在定義和聲明時僅指定數組的類型,而不指定數組的大小,只是在程序設計中為程序動態(tài)地開辟存儲空間。1.一維動態(tài)數組一維動態(tài)數組的定義格式如下:type<數組類型名>=arrayof<基類型>也可以在變量聲明中直接聲明動態(tài)數組,其格式為:var<變量名>:arrayof<基類型>;動態(tài)數組的聲明中沒有給出數組的下標類型,因此具有不確定的大小。動態(tài)數組的大小通過調用標準過程Setlength來明確。2.多維動態(tài)數組聲明多維動態(tài)數組采用遞歸定義的方式,如下:type<數組類型名>=arrayofarrayof…arrayof<基類型>;var<變量名>:<數組類型名>或者采用如下方式定義多維動態(tài)數組變量:
var<變量名>:arrayofarrayof…arrayof<基類型>;多維動態(tài)數組聲明后,使用Setlength過程設置動態(tài)數組的大小。5.4.3記錄類型1.記錄類型的定義記錄類型定義的格式如下:type<記錄類型名>=Record<域名表1>:<類型1>;<域名表2>:<類型2>;...<域名表n>:<類型n>;end;其中,<域名表>可以是多個合法的域名標識符,域名又稱為字段名,<類型>可以是任意數據類型。同一個記錄類型中不能有同名的字段,而因為作用域的不同,記錄內的字段名與記錄外的標識符可以相同。2.記錄域的訪問由于記錄類型中各字段的類型不同,所以不能同時訪問記錄的多個字段,而只能對記錄的單個字段進行訪問。有兩種方法:(1)記錄變量名限定為了標識記錄字段所屬的記錄變量,使用記錄變量名進行限定,格式如下:<記錄變量名>.<字段名>則為記錄的單個字段賦值可以使用如下語句:C1.Custid:=1;C2.IfPay:=True;(2)使用With語句如果需要經常訪問記錄的字段,每次都用記錄變量名進行限定非常麻煩,可以使用With語句加以簡化。With語句格式如下:With<記錄變量名>DO<語句>其中,<語句>可以是簡單語句,也可以是復合語句。在<語句>中字段的訪問不需要加記錄變量名進行限定。3.記錄的變體部分帶有變體部分的記錄類型的聲明格式為:type<記錄類型名>=Record<域名表1>:<類型1>;<域名表2>:<類型2>;...<域名表n>:<類型n>;Case<識別字段標識符>:<識別字段類型>of<常量表1>:<字段列表1>;<常量表2>:<字段列表2>;…<常量表n>:<字段列表n>;end;注意:(1)Case前面的聲明部分同平常的記錄類型聲明一樣,但如果記錄域中含有變體部分,則變體部分應位于記錄域的最后。(2)變體部分總識別字段標識符是可選的,省略時連同“:”號一起省略,在同一記錄域中必須是唯一的。識別字段類型必須是順序類型,如果是枚舉或子界類型,則必須事先聲明。其中的字段列表i同普通的記錄類型中域名表的聲明相同。其功能應用類似于選擇結構中的Case語句。指針是一種特殊的數據類型,指針類型(Pointer)的變量稱為指針變量。指針變量具有一般變量的三個基本要素,即變量名、變量類型、變量值,它與一般變量的不同,它是用來存放其他變量內存地址的一種變量。5.5.1指針變量的聲明定義指針類型的語法如下:type<指針類型名>=^<基類型>其中,<基類型>可以是基本數據類型,如整型、實型、字節(jié)型等,也可以是高級數據類型,如集合、數組、集合等類型。5.5指針類型5.5.2指針變量的賦值為指針變量賦值的格式如下:<指針變量名>:=@<標識符>其中,“@”操作符是個一元操作符,用于獲取操作數的內存地址,@后面的操作數可以是變量、過程和函數等。5.5.3無類型指針變量無類型的指針是指指針變量在聲明時沒有指明基類型,無類型指針在聲明中只使用Pointer,其聲明格式如下:var<指針變量名>:Pointer;無類型的指針的作用是它可以指向任何類型,對于無類型指針,不能用指針變量符號后加^的形式來引用它的動態(tài)變量。5.5.4字符指針類型字符指針類型即Pchar數據類型,是一個指向以NULL字符結尾的字符串的指針。主要用于與外部函數如在WindowsAPI中所用的函數兼容。在DelphiXE8中,可以把一個字符串直接賦值給一個Pchar類型的變量。5.5.5指針變量的動態(tài)使用1.New過程和Dispose過程如果不使用@運算符為指針變量賦值,則指針變量稱為動態(tài)指針變量,動態(tài)變量在訪問之前必須首先分配內存單元。ObjectPascal提供了標準過程New,用來為動態(tài)變量分配內存單元,并把該單元的地址賦給指針變量,所分配單元的大小由指針所指的類型決定。如果應用程序的堆棧中已沒有足夠的空間,將觸發(fā)EoutOfMemory異常。
調用New過程的格式如下:
New(<指針變量名>);調用過程New(p)之后,可以用“p^”表示一個整型的動態(tài)變量,對其進行操作。當程序不再需要使用動態(tài)變量時,就調用標準過程Dispose刪除New所創(chuàng)建的動態(tài)變量,并釋放所分配的內存單元。
調用Dispose過程的格式如下:
Dispose(<指針變量名>);2.GetMem過程和FreeMem過程標準過程GetMem用于為動態(tài)變量申請一塊指定大小的內存區(qū)域,并把該區(qū)域的起始地址賦給指針變量。如果應用程序的堆棧中已沒有足夠的空間,將觸發(fā)EoutOfMemory異常。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)老院老人康復訓練指導制度
- 《服務成就價值》課件
- 技術合同范本
- 2024年塔吊司機安全操作培訓與勞動權益保障協(xié)議3篇
- 6 《哈姆萊特(節(jié)選)》(學案)-教案課件-部編高中語文必修下冊
- 2024年生日蛋糕定制與航空旅行禮品合作合同2篇
- 《脊柱區(qū)局部解剖學》課件
- 2025年湖北貨運上崗證模擬考試題
- 2024年水路貨物運輸節(jié)能減排管理細則合同3篇
- 2025年太原貨運從業(yè)資格考試模擬考試題目及答案
- 技術工程部崗位職責說明書(工程部)
- 整理版鉸接式護坡施工指南
- 《光輝歲月》教案
- 英文審稿意見匯總
- 兒童早期口腔健康管理-948-2020年華醫(yī)網繼續(xù)教育答案
- 鋼卷尺檢定證書
- 新人教版五年級數學《位置》教學設計(第1課時) (2)
- 新電氣符號國標
- 綜采隊班組民主會議記錄
- 三角函數及解三角形在高考中的地位和應對策略
- 向下管理高爾夫實戰(zhàn)
評論
0/150
提交評論