色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

delphi指針鏈表使用方法

delphi指針鏈表使用方法?

因?yàn)閐elphi的數(shù)據(jù)類(lèi)型使用很方便,我一直以來(lái)都沒(méi)有使用過(guò)指針,但最近的一個(gè)軟件需要使用到鏈表,所以不得不學(xué)習(xí)delphi的指針。不用不知道,到用的時(shí)候才發(fā)現(xiàn)凡是介紹delphi的書(shū)籍都回避了指針的問(wèn)題,好不容易在網(wǎng)上找到一篇《淺談Object Pascal的指針》。雖然文章那delphi的指針和c/c++的進(jìn)行了對(duì)比學(xué)習(xí),但實(shí)用例子實(shí)在太少了,所以我在寫(xiě)完程序后,把一些使用過(guò)程里的感想寫(xiě)下。

現(xiàn)在假設(shè)我們的鏈表存儲(chǔ)的只是一個(gè)變量 i,那么在c/c++里的結(jié)構(gòu)體定義如下:

struct Ttest

{

int i;

struct Ttest * next;

};

我仿照c的定義方式寫(xiě)了一個(gè)結(jié)構(gòu)體

type Ttest = record

i: integer;

next: ^Ttest;

end;

試編譯了一次,出錯(cuò)在 next: ^Ttest; 上(類(lèi)型未定義),看來(lái)在delphi嚴(yán)格語(yǔ)法下,結(jié)構(gòu)體里不能出現(xiàn)自己的結(jié)構(gòu)體指針,這就讓我有些為難了,看來(lái)只有想辦法對(duì)他進(jìn)行迂回作戰(zhàn)。經(jīng)過(guò)再次研究《淺談Object Pascal的指針》發(fā)現(xiàn)有一種無(wú)類(lèi)型指針Pointer可以使用,便把^Ttest替換為Pointer。編譯通過(guò)了。既然next指針是作為無(wú)類(lèi)型的指針,那在使用時(shí)就必須先把這個(gè)指針賦值給一個(gè)有類(lèi)型指針后才能對(duì)指針?biāo)赶虻慕Y(jié)構(gòu)體變量進(jìn)行控制。

有了結(jié)構(gòu)體,接下來(lái),我設(shè)計(jì)了一個(gè)用鏈表實(shí)現(xiàn)的隊(duì)列的類(lèi)TQueue。(這里給出的類(lèi)是簡(jiǎn)化了的)

Type

TQueue = class

private

First, last: ^Ttest

Public

Procedure add(s: integer);

End;

Procedure TQueue.add(s: integer)

Var

P: ^Ttest;

Begin

Getmam(P, sizeof(Ttest));

p.i := i;

p.next := nil;

last.next := p;

last := p;

End;

Add()是往隊(duì)列里添加一個(gè)數(shù)據(jù),它先用getman函數(shù)獲得一塊內(nèi)存,然后變量賦值,在把新分配的變量掛入鏈表的末端。看起來(lái)很簡(jiǎn)單,實(shí)際寫(xiě)起代碼也很簡(jiǎn)單,不過(guò)編譯器就是不給你通過(guò)。在 last := p 這里提示變量類(lèi)型不一致。我又重新檢查了一遍代碼,并為發(fā)現(xiàn)又什么問(wèn)題,都是定義為^Ttext的指針,為什么就是不行!對(duì)著屏幕發(fā)呆了一會(huì),決定進(jìn)行迂回作戰(zhàn),這次把first,last都定義為無(wú)類(lèi)型指針Pointer,再次編譯通過(guò)了。不過(guò)需要對(duì)add()進(jìn)行一些相應(yīng)的改動(dòng),添加了一個(gè)臨時(shí)結(jié)構(gòu)體變量t。

Procedure TQueue.add(s: integer)

Var

t, P: ^Ttest;

Begin

Getmam(P, sizeof(Ttest));

p.i := i;

p.next := nil;

t := last;

t.next := p;

last := p;

End;

java鏈表插入,delphi指針鏈表使用方法