指 針指標的動態變數
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...