Pascal詳解 指標型別 ,pascal所有資料型別

2021-05-05 18:29:41 字數 5624 閱讀 6812

1樓:

第十一章 指標型別

11.1 指標

11.2 單鏈表

11.1 指標

指標是通過位址來訪問變數的一種特殊的資料型別,屬於動態的資料結構,它可以在需要時產生,用完後則又可以取消或**,以減少占用的記憶體空間。指標變數與其他型別的變數不同,它占有的不是資料,而是位址。

由於動態資料結構的變數是在程式執行過程中動態生成的,所以不能預先予以說明,無法預先給這些變數起名字,訪問時也無法通過名字直接輸出或顯示,而只能用指標得到其位址,然後間接訪問。

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^之間有如下關係:

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

p^:=5;

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

i:=p^;

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

p:=nil;

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

3、對動態變數的操作

在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。

4.需要注意之處

1、p與p^的區別

p是指向該動態變數的指標變數名,p^則稱為動態變數或標誌變數。p的值是p^的首位址,p^的值為與基型別相同的乙個值。

2、定義後及時分配儲存單元

定義了乙個指標變數後,並沒有為該指標分配動態儲存單元,此時的p的值無定義,呼叫p^則會產生執行錯誤。若想使該指標可用,可以對指標賦值,也可以通過new()過程分配儲存單元。

3、使用後及時收回儲存單元

指標使用後,不會自動歸還占用的儲存空間,應及時使用dispose()過程來釋放p^所占用的儲存單元,以免浪費有限的儲存空間.

11.2 單鏈表

單鏈表的資料型別可定義如下:

type dlb=^node;

node=record

data:datatype;

next:dlb;

end;

例1 連續輸入一串行整數,組成鍊錶(並以動態的形式把它們記錄下來),當輸入的數為-1時,停止輸入,然後把輸入的整數按相反的順序輸出.

program lianbiao;

type link=^data;

data=record

num:integer;

next:link;

end;

var p,q:link;

i:integer;

begin

q:=nil;

readln(i);

while i<>-1 do

begin

new(p);

with p^ do

begin

num:=i;

next:=q;

end;

q:=p;

readln(i);

end;

while p<>nil do

begin

write(p^.num:6);

p:=p^.next;

end;

readln;

end.

練習:將例1中如果資料不按現反的順序(按輸入時的順序)輸出時,怎樣建表.(程式)

上述建表方式其實就是分別從表頭和表尾插入元素,下面是從表中插入元素;

例2:輸入若干整數(輸入32767停止輸入)排序(小到大)輸出之。

program lianbiao;

type link=^data;

data=record

num:integer;

next:link;

end;

var head,p,q,r:link;

i:integer;

begin

head:=nil;

readln(i);

while i<>32767 do

begin

new(p);

p^.num:=i;

p^.next:=nil;

if head=nil then begin head:=p;end

else

begin

q:=head;

if p^.num=q^.num) and (q<>nil) do begin r:=q ;q:=q^.next;end;

if q=nil then r^.next:=p else begin r^.next:=p;p^.next:=q end

end;

end;

readln(i);

end;

p:=head;

while p<>nil do

begin

write(p^.num:6);

p:=p^.next;

end;

readln;

end.

2樓:匿名使用者

10.1 指標的動態變數

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之間有如下關係:

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

p^:=5;

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

i:=p^;

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

p:=nil;

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

10.2 對動態變數的操作

在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^:$);

pascal所有資料型別

3樓:匿名使用者

標準抄型別:integer,real,char,boolean,text.

real 實數

integer 整數

longint 長整型

shortint 短整型

int64 超長整型

single 單精度

double 雙精度

char 單個字元

string 字元型

ansistring 記憶體字元型

int64 -2^63-2^63-1的整數型別qword 無符號的整型(0~2^64-1)

pascal布林型別的使用

孤獨我不喜歡 布林型 boolean 是一種資料的型別,這種型別只有兩種值,即 真 與 假 1 布林常量 在pascal語言中 真 用ture表示,假 用false表示。所以布林型別只有true與false兩個常量。2 布林變數 boolean 如果我們將某些變數說明成布林型,那麼這些變數就是布林變...

obv指標詳解怎樣用,如何應用obv指標

能量潮 obv 是將成交量數量化,製成趨勢線,配合股價趨勢線,從 的變動及成交量的增減關係,推測市場氣氛。其主要理論基礎是市場 的變化必須有成交量的配合,股價的波動與成交量的擴大或萎縮有密切的關連。通常股價上公升所需的成交量總是較大 時,則成交量可能放大,也可能較小。公升降而成交量不相應公升降,則市...

強制轉換成指標型別並賦值,關於指標型別強制轉換

因為myntreadmemory和 ulong是乙個層次的資料。如果使用 ulong oldntreadmemory就是將myntreadmemory賦給ulong 型別的指標,指標名字為 oldntreadmemory。但是這個時候myntreadmemory就是把它的值當成位址賦給oldntre...