Delphi 的型別與指標

2021-05-24 01:58:24 字數 2813 閱讀 4319

談談 delphi 的型別與指標[1]

先宣告: 不要把我說的這些個東西當作教科書, 這都是自己的淺見; 同時希望得到指正.

delphi 的指標分為 "型別指標" 和 "無型別指標" 兩類.

delphi 中的型別, 常用的也得有幾百個, 我們可以給每種型別定義相應的型別指標.

其實 delphi 已經為很多態別預定義了指標, 譬如資料型別: 

integer 有對應的 pinteger;

char 有對應的 pchar;

string 有對應的 pstring;

再譬如: 

tpoint 有對應的 ppoint;

tcolor 有對應的 pcolor 等等.

另外, 指標也可以有指標, 譬如: pchar 是字元指標, ppchar 又是 pchar 的指標(這都是 delphi 預定義的).

根據上面的例子, 咱們先總結一下型別與指標的命名規則:

型別約定用 t 打頭(delphi 常規的資料型別除外, 譬如: string);

指標約定用 p 打頭;

指標的指標約定用 pp 打頭.

型別和指標是不可分的兩個概念, 指標本身也是一種型別 - "指標型別".

先認識一下指標相關的操作符(@、^、addr):

@@變數

獲取變數指標

addr

addr(變數)

^指標^

獲取指標指向的實際資料

var p***: ^型別

定義 p*** 某種型別的指標的變數 

type p*** = ^型別 

定義 p*** 為某種型別的指標

舉例說明:

unit unit1;

inte***ce

uses

windows, messages, sysutils, variants, classes, graphics, controls, forms,

dialogs, stdctrls;

type

tform1 = class(tform)

button1: tbutton;

button2: tbutton;

button3: tbutton;

button4: tbutton;

procedure button1click(sender: tobject);

procedure button2click(sender: tobject);

procedure button3click(sender: tobject);

procedure button4click(sender: tobject);

end;

var form1: tform1;

implementation

//integer 與 pinteger

procedure tform1.button1click(sender: tobject);

var int: integer;

pint: pinteger;

begin

int := 100;

pint := @int;

pint^ := pint^ + 1;

showmessage(inttostr(int));

showmessage(inttostr(pint^));

end;

//直接定義型別指標

procedure tform1.button2click(sender: tobject);

var int: integer;

pmyint: ^integer;

begin

int := 100;

pmyint := addr(int);

pmyint^ := pmyint^ + 1;

showmessage(inttostr(int));

showmessage(inttostr(pmyint^));

end;

//先自定義指標型別

procedure tform1.button3click(sender: tobject);

type

pint = ^integer;

var int: integer;

pmyint: pint;

begin

int := 100;

pmyint := @int;

pmyint^ := pmyint^ + 1;

showmessage(inttostr(int));

showmessage(inttostr(pmyint^));

end;

//指標的指標

procedure tform1.button4click(sender: tobject);

var int: integer;

pint: pinteger;

ppint: ^pinteger;

begin

int := 100;

pint := @int;

ppint := @pint;

ppint^^ := ppint^^ + 1;

showmessage(inttostr(int));

showmessage(inttostr(pint^));

showmessage(inttostr(ppint^^));

end;

end.

知道以上這些就可以操作了, 就可以看懂別人的**了; 不過要想徹底明白指標到底是怎麼回事, 需要從記憶體談起.

Delphi 的型別與指標

先宣告 不要把我說的這些個東西當作教科書,這都是自己的淺見 同時希望得到指正.delphi 的指標分為 型別指標 和 無型別指標 兩類.delphi 中的型別,常用的也得有幾百個,我們可以給每種型別定義相應的型別指標.其實 delphi 已經為很多態別預定義了指標,譬如資料型別 integer 有對...

C與DELPHI指標型別

一 型別指標的定義。對於指向特定型別的指標,在c中是這樣定義的 int ptr char ptr 與之等價的object pascal是如何定義的呢?varptr integer ptr char 其實也就是符號的差別而已。二 無型別指標的定義。c中有void 型別,也就是可以指向任何型別資料的指標...

談談 Delphi 的型別與指標 2

記憶體中的資料除了 0 便是 1,你把它當作 字元 數字等等,那是你的事,記憶體只認識 0 和 1.win32 系統除了使用硬記憶體以外,還可以從硬碟上開闢虛擬記憶體 因為 win32 的記憶體位址範圍在 4 個 g 以內 0.2 32 1 所以它最多能夠給乙個應用程式分配 4g 的執行空間 並且其...