delphi 指標使用

2021-04-29 12:45:07 字數 1831 閱讀 5017

指  針 

指標的動態變數

1.定義指標型別

在turbo pascal中,指標變數中存放的某個儲存單元的位址,即指標變數指向某個儲存單元。乙個指標變數僅能指向某一種型別的儲存單元,這種資料型別是在指標型別的定義中確定的,稱為指標型別的基型別。指標型別定義如下:

型別名=^基型別名;

例如:type q=^integer;

var a,b,c:q;

說明q是一指向整型儲存單元的指標型別,其中"^"為指標符。a,b,c均定義為指標變數,分別可以指向乙個整型儲存單元。

上例也可定義為:

var a,b,c:^integer;

指標也可以指向有結構的儲存單元。

例如:type person=record

name:string[10];

***:(male,female);

age:20..70

end;

var pt:^person;

pt為指向記錄型別person的指標變數。

2.動態變數

應用乙個指標指向的動態儲存單元即動態變數的形式如下:

指標變數名^

例如:p^、q^、r^

指標變數p和它所指向的動態變數^p之間有如下關係:

p->p'

以下語句把整數5存放到p所指向的動態變數p^ 中去:

p^:=5;

以下語句把p所指向的p^中的值賦給整型變數i:

i:=p^;

如果指標變數p並未指向任何儲存單元,則可用下列賦值語句:

p:=nil;

其中nil是turbo pascal保留字,表示「空」,相當於c裡面的null

對動態變數的操作

在turob pascal程式中,動態變數不能由var直接定義而是通過呼叫標準過程new建立的。過程形式為:

new(指標變數名);

如果有下列變數定義語句:

var p:^integer;

僅僅說明了p是乙個指向整型變數單元的指標變數,但這個整型單元並不存在,在指標變數p中還沒有具體的位址值。在程式中必須通過過程呼叫語句:new(p);才在記憶體中分配了乙個整型變數單元,並把這個單元的位址放在變數p中,乙個指標變數只能存放乙個位址。在同一時間內乙個指標只能指向乙個變數單元。當程式再次執行new(p)時,又在記憶體中新建立了乙個整型變數單元,並把新單元的位址存放在p中,從而丟失了舊的變數單元的位址。

為了節省記憶體空間,對於一些已經不使用的現有動態變數,應該使用標準過程dispose予以釋放。過程形式為:dispose(指標變數名);為new(指標變數名)的逆過程,其作用是釋放由指標變數所指向的動態變數的儲存單元。例如在用了new(p)後在呼叫dispose(p),則指標p所指向的動態變數被撤銷,記憶體空間還給系統,這時

p的值為 nil。

例:輸入兩個數,要求先列印大數後列印小數的方式輸出,用動態變數做。

program dongtai;

type intepter=^integer;

var p1,p2:intepter;

procedure swap(var,q1,q2:intepter);

var p:integer;

begin

p:=q1;q1:=q2;q2:=p;

end;

begin

new(p1);new(p2);

writeln('input 2 data: ');readln(p1^,p2^);

if p1^ writeln('output 2 data: ',p1^:4,p2^:$);

end.

DELPHI 指標使用

delphi裡自己管理記憶體的兩對函式 new dispose 和getmem freemem 大家都認為,c語言之所以強大,以及其自由性,很大部分體現在其靈活的指標運用上。因此,說指標是c語言的靈魂,一點都不為過。同時,這種說法也讓很多人 產生誤解,似乎只有c語言的指標才能算指標。basic不支援...

Delphi之指標使用

以下內容分為八部分,分別是 一 型別指標的定義 二 無型別指標的定義 三 指標的解除引用 四 取位址 指標賦值 五 指標運算 六 動態記憶體分配 七 字元陣列的運算 八 函式指標 一 型別指標的定義。對於指向特定型別的指標,在c中是這樣定義的 int ptr char ptr 與之等價的object...

DELPHI如何使用指標

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