談談 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 的執行空間 並且其...