Delphi 第05章-高級(jí)數(shù)據(jù)類型_第1頁
Delphi 第05章-高級(jí)數(shù)據(jù)類型_第2頁
Delphi 第05章-高級(jí)數(shù)據(jù)類型_第3頁
Delphi 第05章-高級(jí)數(shù)據(jù)類型_第4頁
Delphi 第05章-高級(jí)數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第5章Delphi高級(jí)數(shù)據(jù)類型Delphi程序設(shè)計(jì)教程(第3版)清華大學(xué)出版社楊長(zhǎng)春主編5.1.1枚舉類型的定義與變量聲明1.枚舉類型的定義枚舉類型使用一組有限的標(biāo)識(shí)符來表示一組連續(xù)的整數(shù)常數(shù),它的值是有限的。枚舉類型的定義格式如下:type<類型名稱>=(<標(biāo)識(shí)符1>,<標(biāo)識(shí)符2>,…<標(biāo)識(shí)符n>);5.1枚舉類型說明:(1)type是系統(tǒng)的保留字,表示定義高級(jí)數(shù)據(jù)類型的開始。(2)<標(biāo)識(shí)符>表示該類型數(shù)據(jù)中的元素,圓括號(hào)中列出了該類型數(shù)據(jù)的所有取值,這些取值又稱為枚舉常量。(3)同一個(gè)枚舉常量不允許重復(fù)出現(xiàn)在同一個(gè)枚舉類型定義中,也不允許同時(shí)出現(xiàn)在不同的枚舉類型定義中。2.枚舉類型變量的聲明其聲明的格式與其他類型變量的聲明完全相同例如:VarC:Color;該語句聲明了一個(gè)枚舉類型Color的變量C。5.1.2枚舉類型的運(yùn)算1.使用函數(shù)ObjectPascal為枚舉類型定義了5個(gè)枚舉函數(shù),可以進(jìn)行特殊的運(yùn)算。說明:(1)枚舉類型定義語句中列出的每一個(gè)枚舉常量都對(duì)應(yīng)一個(gè)唯一的序數(shù)(整數(shù)),稱為枚舉序數(shù),在缺省情況下,列出的第一個(gè)枚舉常量對(duì)應(yīng)枚舉系數(shù)0,以后依次為1、2、3…。枚舉函數(shù)

功能

調(diào)用格式

Ord求枚舉序數(shù)Ord(枚舉常量或枚舉變量)Pred求前趨值Pred(枚舉常量或枚舉變量)Succ求后繼值Succ(枚舉常量或枚舉變量)Low求第1個(gè)枚舉常量Low(枚舉類型名)High求最后1個(gè)枚舉常量High(枚舉類型名)(2)在定義枚舉類型時(shí),排在某枚舉常量前一位的枚舉常量稱為該枚舉常量的前趨值,后一位的稱為后繼值。第一個(gè)枚舉常量沒有前趨值,最末一個(gè)枚舉常量沒有后繼值。(3)由于每個(gè)枚舉常量都對(duì)應(yīng)一個(gè)枚舉系數(shù),所以枚舉常量的序數(shù)可以進(jìn)行算術(shù)運(yùn)算,結(jié)果類型為整型。但枚舉常量之間不能直接進(jìn)行算術(shù)運(yùn)算,需要先轉(zhuǎn)換為枚舉序數(shù)。2.關(guān)系運(yùn)算由于每個(gè)枚舉常量對(duì)應(yīng)一個(gè)唯一的序數(shù),因此可以在枚舉常量之間進(jìn)行關(guān)系運(yùn)算。如在上述定義中,sun<wed的值為真(true),fri>sat的值為假(false)。5.2.1子界類型的定義子界類型的定義格式如下:type<類型名稱>=<常量1>..<常量2>;說明:(1)<常量1>表示子界類型的下界,即最小值,<常量2>表示子界類型的上界,即最大值。子界的上下界必須屬于相同的順序類型,即它們應(yīng)同時(shí)為整型、布爾型、字符型或同一個(gè)枚舉類型。(2)子界的上界必須不小于下界。5.2子界類型(3)子界的上下界所屬的數(shù)據(jù)類型即為子界的基類型,若子界的基類型為標(biāo)準(zhǔn)數(shù)據(jù)類型(整型、布爾型、字符型),則子界的上、下界可以直接使用該類型常量,若子界的基類型為枚舉類型,則必須先定義基類型(枚舉類型),再定義子界類型。5.2.2子界類型變量的聲明其聲明格式與其他類型變量的聲明完全相同,如下面的代碼聲明了一個(gè)上述子界類型month的變量ml和workday類型的變量wl:varml:month:wl:workday:5.2.3子界類型的運(yùn)算子界類型所允許的運(yùn)算與其基類型所允許的運(yùn)算相同,如基類型為整型子界類型變量可以進(jìn)行算術(shù)、關(guān)系等運(yùn)算,而基類型為枚舉類型的子界類型變量?jī)H能進(jìn)行關(guān)系運(yùn)算。集合結(jié)構(gòu)是指具有相同性質(zhì)的對(duì)象的全體,構(gòu)成集合的每個(gè)對(duì)象稱為集合的元素。注意:(1)集合中的元素是互異的、無序的。(2)集合元素個(gè)數(shù)不能超過256個(gè)。(3)元素與集合的關(guān)系是“屬于”或“不屬于”,二者必取其一且僅取其一。5.3.1集合類型的定義其定義格式如下:type<類型名稱>=setof<基類型>;

5.3集合類型說明:(1)<基類型>表示集合中各元素的類型,可以是字符型、布爾型、枚舉型和子界等順序類型,不能是整型、實(shí)型和其他的構(gòu)造類型。(2)若<基類型>為枚舉類型或子界類型,則必須先定義該基類型,再定義集合類型。(3)一個(gè)集合最多只能有256個(gè)元素。另外,只有有序的類型才能跟關(guān)鍵字setof.5.3.2集合變量的聲明其聲明格式與其他類型變量的聲明完全相同。5.3.3變量集合的取值集合變量不同其他變量,它不是一個(gè)單獨(dú)元素,而是一系列元素的一集合。集合變量的取值稱為集合值,其一般表現(xiàn)形式如下:[<元素1>,<元素2>,…,<元素n>]如果集合類型的基類型有n個(gè)元素,則該集合類型變量的取值有2n個(gè),包括一個(gè)空集合([])。5.3.4集合類型的運(yùn)算集合類型的數(shù)據(jù)可以進(jìn)行3大類運(yùn)算:一類是集合對(duì)集合的并、交、差運(yùn)算,其結(jié)果為集合值;一類是集合的關(guān)系運(yùn)算,其結(jié)果是邏輯值;一類是元素對(duì)集合的“屬于”運(yùn)算,其結(jié)果也是邏輯值。運(yùn)算名稱

表示方式

運(yùn)算結(jié)果

是否滿足交換律

并運(yùn)算S1+S2兩個(gè)集合中所有不重復(fù)元素組成的新集合是交運(yùn)算S1*S2兩個(gè)集合所共有的元素組成的新集合是差運(yùn)算S1-S2所有屬于S1但不屬于S2的元素的集合否相等運(yùn)算S1=S2如果S1與S2所包含的元素完全相同,則結(jié)果為True,否則為False是不等運(yùn)算S1<>S2如果S1與S2所包含的元素完全不同,則結(jié)果為True,否則為False是包含運(yùn)算S1>=S2如果S2中的元素都在S1中,則結(jié)果為True,否則為False否被包含運(yùn)算S1<=S2如果S1中的元素都在S2中,則結(jié)果為True,否則為False否屬于運(yùn)算XinS1如果元素X與集合S1的基類型相同,且被包含在S1中,則結(jié)果為True,否則為False.否集合運(yùn)算符具有不同的優(yōu)先級(jí),如表所示:優(yōu)先級(jí)運(yùn)算符操作數(shù)類型結(jié)果值類型高*集合集合中+集合集合低=、<>、>=、<=集合邏輯最低in左操作數(shù)為元素,右操作數(shù)為集合邏輯數(shù)組類型(Array)是一些具有相同類型的元素按一定順序組成的序列。數(shù)組中的每一個(gè)數(shù)據(jù)元素都可以通過數(shù)組名來存取,它們被順序安排在內(nèi)存中的一段連續(xù)的區(qū)域中。ObjectPascal提供的數(shù)組分為靜態(tài)數(shù)組和動(dòng)態(tài)數(shù)組。而記錄類型可以將不同的數(shù)據(jù)集中在一起,并作為一個(gè)整體進(jìn)行操作。

5.4.1靜態(tài)數(shù)組靜態(tài)數(shù)組在程序初始化時(shí)必須分配內(nèi)存單元,明確其固定的大小和元素的數(shù)據(jù)類型。5.4數(shù)組與記錄類型1.一維靜態(tài)數(shù)組數(shù)組通常分為為一維、二維和多維數(shù)組,定義一維靜態(tài)數(shù)組類型的格式為:type<數(shù)組類型名>=array[<下標(biāo)類型>]of<基類型>;

ObjectPascal允許的下標(biāo)的類型為整數(shù)類型、字符類型、布爾類型、子界類型、枚舉類型等,而元素的類型可以是任意的數(shù)據(jù)類型,并且在同一數(shù)組中,所有元素的數(shù)據(jù)類型必須相同。對(duì)于用戶定義的數(shù)據(jù)類型作為下標(biāo)類型,在使用之前必須聲明。

要訪問數(shù)組中元素,可以用數(shù)組名加方括號(hào),方括號(hào)內(nèi)是元素的下標(biāo)值,方括號(hào)內(nèi)的下標(biāo)值必須符合數(shù)組類型中下標(biāo)類型的定義,其類型必須與下標(biāo)類型一致,其值在下標(biāo)取值范圍內(nèi)。而且下標(biāo)也可以是表達(dá)式。使用ObjectPascal提供的標(biāo)準(zhǔn)函數(shù)Low和high,可以返回一個(gè)數(shù)組的最小下標(biāo)值和最大下標(biāo)值,而函數(shù)Length可以返回?cái)?shù)組的長(zhǎng)度。2.二維靜態(tài)數(shù)組二維數(shù)組是指一個(gè)一維數(shù)組中的元素類型又是一個(gè)一維數(shù)組,其一般形式為:type<數(shù)組標(biāo)識(shí)符>=Array[<下標(biāo)類型1>]ofArray[<下標(biāo)類型2>]of<基類型>;也可以把上述形式寫成下面的形式:type<數(shù)組標(biāo)識(shí)符>=Array[<下標(biāo)類型1>,<下標(biāo)類型2>]of<基類型>;3.多維靜態(tài)數(shù)組多維靜態(tài)數(shù)組的一般格式:type<數(shù)組標(biāo)識(shí)符>=Array[<下標(biāo)類型1>,<下標(biāo)類型2>,…<下標(biāo)類型n>]of<基類型>;5.4.2動(dòng)態(tài)數(shù)組動(dòng)態(tài)數(shù)組在定義和聲明時(shí)僅指定數(shù)組的類型,而不指定數(shù)組的大小,只是在程序設(shè)計(jì)中為程序動(dòng)態(tài)地開辟存儲(chǔ)空間。1.一維動(dòng)態(tài)數(shù)組一維動(dòng)態(tài)數(shù)組的定義格式如下:type<數(shù)組類型名>=arrayof<基類型>也可以在變量聲明中直接聲明動(dòng)態(tài)數(shù)組,其格式為:var<變量名>:arrayof<基類型>;動(dòng)態(tài)數(shù)組的聲明中沒有給出數(shù)組的下標(biāo)類型,因此具有不確定的大小。動(dòng)態(tài)數(shù)組的大小通過調(diào)用標(biāo)準(zhǔn)過程Setlength來明確。2.多維動(dòng)態(tài)數(shù)組聲明多維動(dòng)態(tài)數(shù)組采用遞歸定義的方式,如下:type<數(shù)組類型名>=arrayofarrayof…arrayof<基類型>;var<變量名>:<數(shù)組類型名>或者采用如下方式定義多維動(dòng)態(tài)數(shù)組變量:

var<變量名>:arrayofarrayof…arrayof<基類型>;多維動(dòng)態(tài)數(shù)組聲明后,使用Setlength過程設(shè)置動(dòng)態(tài)數(shù)組的大小。5.4.3記錄類型1.記錄類型的定義記錄類型定義的格式如下:type<記錄類型名>=Record<域名表1>:<類型1>;<域名表2>:<類型2>;...<域名表n>:<類型n>;end;其中,<域名表>可以是多個(gè)合法的域名標(biāo)識(shí)符,域名又稱為字段名,<類型>可以是任意數(shù)據(jù)類型。同一個(gè)記錄類型中不能有同名的字段,而因?yàn)樽饔糜虻牟煌?,記錄?nèi)的字段名與記錄外的標(biāo)識(shí)符可以相同。2.記錄域的訪問由于記錄類型中各字段的類型不同,所以不能同時(shí)訪問記錄的多個(gè)字段,而只能對(duì)記錄的單個(gè)字段進(jìn)行訪問。有兩種方法:(1)記錄變量名限定為了標(biāo)識(shí)記錄字段所屬的記錄變量,使用記錄變量名進(jìn)行限定,格式如下:<記錄變量名>.<字段名>則為記錄的單個(gè)字段賦值可以使用如下語句:C1.Custid:=1;C2.IfPay:=True;(2)使用With語句如果需要經(jīng)常訪問記錄的字段,每次都用記錄變量名進(jìn)行限定非常麻煩,可以使用With語句加以簡(jiǎn)化。With語句格式如下:With<記錄變量名>DO<語句>其中,<語句>可以是簡(jiǎn)單語句,也可以是復(fù)合語句。在<語句>中字段的訪問不需要加記錄變量名進(jìn)行限定。3.記錄的變體部分帶有變體部分的記錄類型的聲明格式為:type<記錄類型名>=Record<域名表1>:<類型1>;<域名表2>:<類型2>;...<域名表n>:<類型n>;Case<識(shí)別字段標(biāo)識(shí)符>:<識(shí)別字段類型>of<常量表1>:<字段列表1>;<常量表2>:<字段列表2>;…<常量表n>:<字段列表n>;end;注意:(1)Case前面的聲明部分同平常的記錄類型聲明一樣,但如果記錄域中含有變體部分,則變體部分應(yīng)位于記錄域的最后。(2)變體部分總識(shí)別字段標(biāo)識(shí)符是可選的,省略時(shí)連同“:”號(hào)一起省略,在同一記錄域中必須是唯一的。識(shí)別字段類型必須是順序類型,如果是枚舉或子界類型,則必須事先聲明。其中的字段列表i同普通的記錄類型中域名表的聲明相同。其功能應(yīng)用類似于選擇結(jié)構(gòu)中的Case語句。指針是一種特殊的數(shù)據(jù)類型,指針類型(Pointer)的變量稱為指針變量。指針變量具有一般變量的三個(gè)基本要素,即變量名、變量類型、變量值,它與一般變量的不同,它是用來存放其他變量?jī)?nèi)存地址的一種變量。5.5.1指針變量的聲明定義指針類型的語法如下:type<指針類型名>=^<基類型>其中,<基類型>可以是基本數(shù)據(jù)類型,如整型、實(shí)型、字節(jié)型等,也可以是高級(jí)數(shù)據(jù)類型,如集合、數(shù)組、集合等類型。5.5指針類型5.5.2指針變量的賦值為指針變量賦值的格式如下:<指針變量名>:=@<標(biāo)識(shí)符>其中,“@”操作符是個(gè)一元操作符,用于獲取操作數(shù)的內(nèi)存地址,@后面的操作數(shù)可以是變量、過程和函數(shù)等。5.5.3無類型指針變量無類型的指針是指指針變量在聲明時(shí)沒有指明基類型,無類型指針在聲明中只使用Pointer,其聲明格式如下:var<指針變量名>:Pointer;無類型的指針的作用是它可以指向任何類型,對(duì)于無類型指針,不能用指針變量符號(hào)后加^的形式來引用它的動(dòng)態(tài)變量。5.5.4字符指針類型字符指針類型即Pchar數(shù)據(jù)類型,是一個(gè)指向以NULL字符結(jié)尾的字符串的指針。主要用于與外部函數(shù)如在WindowsAPI中所用的函數(shù)兼容。在DelphiXE8中,可以把一個(gè)字符串直接賦值給一個(gè)Pchar類型的變量。5.5.5指針變量的動(dòng)態(tài)使用1.New過程和Dispose過程如果不使用@運(yùn)算符為指針變量賦值,則指針變量稱為動(dòng)態(tài)指針變量,動(dòng)態(tài)變量在訪問之前必須首先分配內(nèi)存單元。ObjectPascal提供了標(biāo)準(zhǔn)過程N(yùn)ew,用來為動(dòng)態(tài)變量分配內(nèi)存單元,并把該單元的地址賦給指針變量,所分配單元的大小由指針?biāo)傅念愋蜎Q定。如果應(yīng)用程序的堆棧中已沒有足夠的空間,將觸發(fā)EoutOfMemory異常。

調(diào)用New過程的格式如下:

New(<指針變量名>);調(diào)用過程N(yùn)ew(p)之后,可以用“p^”表示一個(gè)整型的動(dòng)態(tài)變量,對(duì)其進(jìn)行操作。當(dāng)程序不再需要使用動(dòng)態(tài)變量時(shí),就調(diào)用標(biāo)準(zhǔn)過程Dispose刪除New所創(chuàng)建的動(dòng)態(tài)變量,并釋放所分配的內(nèi)存單元。

調(diào)用Dispose過程的格式如下:

Dispose(<指針變量名>);2.GetMem過程和FreeMem過程標(biāo)準(zhǔn)過程GetMem用于為動(dòng)態(tài)變量申請(qǐng)一塊指定大小的內(nèi)存區(qū)域,并把該區(qū)域的起始地址賦給指針變量。如果應(yīng)用程序的堆棧中已沒有足夠的空間,將觸發(fā)EoutOfMemory異常。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論