指針是存放指定類型(或未定義類型)變量?jī)?nèi)存地址的變量,因此指針間接引用一個(gè)值。定義指針不需用特定的關(guān)鍵字,而用一個(gè)特殊字符,這個(gè)特殊字符是脫字符號(hào)(^),見下例: type 一旦你定義了指針變量,你就可以用@ 符號(hào)把另一個(gè)相同類型變量的地址賦給它。見下例: var 如果定義了一個(gè)指針P,那么P表示指針?biāo)赶虻膬?nèi)存地址,而P^表示內(nèi)存所存儲(chǔ)的實(shí)際內(nèi)容。因此,在上面的代碼中, P^ 與X相等。 除了表示已分配內(nèi)存的地址外,指針還能通過New 例程在堆中動(dòng)態(tài)分配內(nèi)存,不過當(dāng)你不需要這個(gè)指針時(shí),你也必須調(diào)用Dispose 例程釋放你動(dòng)態(tài)分配的內(nèi)存。 var 如果指針沒有值,你可以把nil 賦給它。這樣,你可以通過檢查指針是否為nil 判斷指針當(dāng)前是否引用一個(gè)值。這經(jīng)常會(huì)用到,因?yàn)樵L問一個(gè)空指針的值會(huì)引起一個(gè)訪問沖突錯(cuò)誤,也就是大家知道的“一般保護(hù)錯(cuò)”(GPF)。 Delphi 還定義了一個(gè)Pointer 數(shù)據(jù)類型,它表示無類型的指針(就象C語言中的void* )。如果你使用無類型指針,你應(yīng)該用GetMem 例程,而不是New例程,因?yàn)镚etMem 例程能用于內(nèi)存分配大小不確定的情況。 實(shí)際上,Delphi 中必須使用指針的情況很少,這是Delphi開發(fā)環(huán)境一個(gè)誘人的優(yōu)點(diǎn)。雖然如此,若要進(jìn)行高級(jí)編程和完全理解Delphi 對(duì)象模型,理解指針是很重要的,因?yàn)镈elphi 對(duì)象模型在幕后使用了指針。 注意:雖然在Delphi中不常使用指針,但是你經(jīng)常會(huì)用一個(gè)極為相似的結(jié)構(gòu)--引用(references)。每個(gè)對(duì)象實(shí)例實(shí)際上是一個(gè)隱含的指針,或說是對(duì)其實(shí)際數(shù)據(jù)的引用,利用引用,你能象用其他數(shù)據(jù)類型一樣使用對(duì)象變量。 |
|