Delphi指標簡單入門

2021-04-14 01:57:20 字數 3276 閱讀 5888

delphi指標簡單入門:   

看乙個指標用法的例子:   

1         var   

2             x,   y:   integer;       //   x   and   y   整數型別   

3             p:   ^integer;           //   p   指向整數型別的指標   

4         begin   

5             x   :=17; //   給   x   賦值   

6             p   :=   @x;                   //   把   x的位址賦給p   

7             y   :=   p^;                   //   取出p所指向的數值賦給y   

8         end;   

第二行定義了兩個變數x,y.   第三行宣告了p是指向整數型別的指標;意味著p能夠指向x或者y的位址.第五行賦給x值,第六行把x的位址賦給p.最   

後通過p指向的變數賦值給y.此時,x和y有相同的值.   

操作符@用來取出變數的位址,也可以取出過程和函式的位址.   

而符號^有兩個目標,   

當它出現在型別定義的前面時如 ^typename 表示指向這種型別的指標;   

當它出現在指標變數後邊時   如 point^ 返回指標指向的變數的值;   

理解指標比較容易理解物件導向的pascal語言,因為指標經常在幕後操作.任何要求動態分配大的記憶體空間的型別可以用指標型別.例如   

,long-string變數,實際在使用指標進行操作.另外一些高階的程式設計技術需要使用指標型別.   

有時指標是適應object   pascal嚴格的型別限制的唯一方法.同過乙個通用的指標型別,通過型別轉換成不同的指標型別,如下面的例子:   

type   

pinteger   =   ^integer;   

var   

r:   single;   

i:   integer;   

p:   pointer; //通用的指標   

pi:   pinteger;   

begin   

p   :=   @r; //取出r的記憶體位址   

pi   :=   pinteger(p); //把通用型別轉換成指向整數型別的指標   

i   :=   pi^;   

end;   

當然了,實數和整數的儲存格式不同.這種賦值是把原始的二進位制資料從r拷貝到i,而不進行轉換.   

保留字nil是乙個特殊的常量可以賦給任何指標型別,當nil賦給乙個指標時,指標什麼也不指向,是乙個空指標.   

@操作符返回變數的記憶體中的儲存位址,或者是過程/函式/方法;   

1.如果變數,@x返回的是x的位址。如果編譯選項沒有開啟,著返回的事乙個通用的指標,如果編譯選項開啟了,著返回的是x的型別對應的指   

針.   

2.如果是例程(過程/函式),@f返回的是f的入口點,@f的型別是乙個指標。   

3.當@用在類的方法中時,則方法的名稱必須有類名,例如@tmyclass.dosomething   

指標指向tmyclass的dosomething方法。   

當乙個過程變數在賦值語句的左邊時,編譯器期望乙個過程值在賦值語句的右邊。這種賦值使得左邊的變數可以指向右邊定義的過程或者函式   

入口點。換句話說,可以通過該變數來引用宣告的過程或者函式,可以直接使用引數的引用。   

var   

f:   function(x:   integer):   integer;   

i:   integer;   

function   somefunction(x:   integer):   integer;   

...   

f   :=   somefunction;     //   給f賦值   

i   :=   f(4);                     //   呼叫所指向的函式   

在賦值語句中,左邊變數的型別決定了右邊的過程或者方法指標解釋。   

var   

f,   g:   function:   integer;   

i:   integer;   

function   somefunction:   integer;   

...   

f   :=   somefunction;     //   給f賦值   

g   :=   f;                           //   把f的值拷貝給g   

i   :=   g;                           //   呼叫函式   

第一句獲得函式的入口,第二句將指標複製,第三句獲得函式的返回值。   

有時候還可以這樣使用   

if   f   =   myfunction   then   ...;   

在這裡,f的出現導致乙個函式呼叫;編譯器呼叫f指向的函式,然後呼叫myfunction,比較結果。這個規則是無論何時乙個過程變數(   

procedural   variable)出現在乙個表示式中,它表示呼叫所指向的函式或者過程。有時f指向乙個過程(沒有返回值),或者f指向乙個需要參   

數的函式,則前面的語句會產生乙個編譯錯誤。要比較f和myfunction需要用   

if   @f   =   @myfunction   then   ...;   

@f把f轉換成乙個包含位址的無型別的指標變數,@myfunction返回myfunction的位址。   

獲得乙個過程變數的記憶體位址使用@@。例如,@@f返回f的位址。   

@操作符通常把乙個無型別的指標值賦給乙個過程變數,例如:   

var   strcomp:   function(str1,   str2:   pchar):   integer;   

...   

@strcomp   :=   getprocaddress(kernelhandle,   'lstrcmpi');   

呼叫getprocaddres函式,用strcomp指向這個值   

任何過程變數可以賦成nil,表示指證什麼也不指向。但是試圖呼叫乙個nil值的過程變數導致乙個錯誤,為了測試乙個過程變數是否可以賦值   

,用標準的賦值函式assigned   

if   assigned(onclick)   then   onclick(x);   

.呵呵   

Delphi 指標 入門

指標,是乙個無符號整數 unsigned int 它是乙個以當前系統定址範圍為取值範圍的整數。指標對應著乙個資料在記憶體中的位址,得到了指標就可以自由地修改該資料。指標的指標就是用來存放指標所在的記憶體位址的。取址運算子 指標的引用解析操作符 1,型別指標的定義。對於指向特定型別的指標 varptr...

Delphi指標認識

大家都認為,c語言之所以強大,以及其自由性,很大部分體現在其靈活的指標運用上。因此,說指標是c語言的靈魂,一點都不為過。同時,這種說法也讓很多人 產生誤解,似乎只有c語言的指標才能算指標。basic不支援指標,在此不論。其實,pascal語言本身也是支援指標的。從最初的pascal發展至今的obje...

delphi 指標使用

指 針 指標的動態變數 1.定義指標型別 在turbo pascal中,指標變數中存放的某個儲存單元的位址,即指標變數指向某個儲存單元。乙個指標變數僅能指向某一種型別的儲存單元,這種資料型別是在指標型別的定義中確定的,稱為指標型別的基型別。指標型別定義如下 型別名 基型別名 例如 type q in...