Delphi String類型和Char類型的比較_第1頁(yè)
Delphi String類型和Char類型的比較_第2頁(yè)
Delphi String類型和Char類型的比較_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

string和Char數(shù)組都是一塊內(nèi)存,其中存放連續(xù)的字符.string保存具體字符的內(nèi)存對(duì)用戶是透明的,由Delphi管理它的分配,復(fù)制和釋放,用戶不能干預(yù)(其實(shí)也可以,不過是通過非法途徑).Char數(shù)組就不必說了吧?

PChar是一個(gè)指針,它的大小只有32位.定義時(shí)由Delphi自動(dòng)填0.要將PChar作為字符串使用的話必須自己分配內(nèi)存用完必須自己釋放.PChar型字符串由#0表示字符串結(jié)尾

Delphi所提供的相關(guān)PChar字符串的操作都是判斷#0來決定字符串的結(jié)尾的。

因?yàn)镻Char是指針,所以它能指向任何地方(也就是說它不一定非要指向字符串不可).

把一個(gè)String賦值給PChar只是將String中保存具體字符串的內(nèi)存的地址給PChar

變量.當(dāng)然也可以把Char數(shù)組第一個(gè)元素的地址給PChar.至于哪個(gè)占用內(nèi)存小,Char數(shù)組<PChar(指分配過字符串的)<string(除了具體字符串外還包含字符串長(zhǎng)度)

如果空字符串那么PChar<String<array[0..n]ofChar

從速度來說毫無疑問string最慢,例如:作為參數(shù)傳遞(非var調(diào)用時(shí))給過程時(shí)string將整個(gè)字串的副本傳遞過去,PChar將指針本身的副本傳遞過去(32位),Char數(shù)組和PChar一樣,傳遞的是第一個(gè)元素的地址副本.

不過就靈活性來說string最高,而且Delphi支持的函數(shù)最多.另外可以將String作為

Buffer使用(因?yàn)樗?dāng)中可以包含字符0).在Delphi2.0以后的版本中,

string分兩種,

一種是與Pascal傳統(tǒng)string相兼容,叫ShortString,

它的存儲(chǔ)結(jié)構(gòu)如下:

+---------------------+

|1Byte|

字符串內(nèi)容|

+---------------------+

0

1......

其中第一個(gè)字節(jié)為字符串的長(zhǎng)度。

所以ShortString所能包括的字符串長(zhǎng)度不能大于255。

另一種是叫長(zhǎng)字符串AnsiString,

它就是一個(gè)指向字符串的指針,不過具體的存儲(chǔ)有些特別。

它的存儲(chǔ)結(jié)構(gòu)如下:

+-----------------------+

|4B|4B|

字符串內(nèi)容|

+-----------------------+

-8

-4

0

......

其中,AnsiString指向字符串第一個(gè)字符,在第一個(gè)字符的反方向第1到第4的4個(gè)字節(jié)表示字符串長(zhǎng)度,第5到第8的4個(gè)字節(jié)表字符串被引用的次數(shù)。pchar就是純指向字符串(#0字符結(jié)尾)的指針,與C語言中的char*是一樣的。char數(shù)組也是指向字符串的指針,它與pchar的區(qū)別在于:

1.char數(shù)組(均指非動(dòng)態(tài)數(shù)組)一旦定義好,它的長(zhǎng)度就固定了;

2.char數(shù)組的地址是常量,不能另賦其它值,不能象pchar一樣,

如:sPchar:pchar;sArray1,sArray2:array[0..80]ofchar;

sPChar:=sArray2;sPChar;=sArray1;

但不能sArray2:=sArray1;

char數(shù)組就相當(dāng)于constchar*要說速度最快當(dāng)然是純指針操作的pchar與char數(shù)組最快啦

所謂占內(nèi)存最少,效率更高,

不知老兄你想進(jìn)行什么方面的應(yīng)用,

一般對(duì)string,pchar或char數(shù)組,不用考慮這些。對(duì)編程而言,如果在Delphi或C++Builder中使用,可盡量使用AnsiString,

Borland公司對(duì)它已經(jīng)進(jìn)行了非常完美的內(nèi)部處理,

使用非常方便。

如果涉及到WindowsAPI或混合編程等,接口部分一般使用pchar。char數(shù)組使用的比較少了,因?yàn)槎鄶?shù)可以用char數(shù)組的地方,

現(xiàn)在比較流行的作法是定義一個(gè)ansistring,再用setlength來設(shè)定它的長(zhǎng)度。lycwg(2001-1-1211:53:20)

------------------------------------------------------------

三、字符串string字符數(shù)組與指向字

符串的指針pchar的區(qū)別與聯(lián)系

這3者的基本概念相同,但有一些非常細(xì)微的差別,在編程時(shí)稍不注意就會(huì)出錯(cuò),需高度重視。

1、使用指向字符串的指針,如果不是以0結(jié)尾,運(yùn)行時(shí)就會(huì)出現(xiàn)錯(cuò)誤。為了避免這種錯(cuò)誤,需要在字符串結(jié)尾人工加入0即char(0),或用strpcopy函數(shù)在字符串結(jié)尾自動(dòng)加0。

例1:指向字符串的指針,如果不是以0結(jié)尾,運(yùn)行時(shí)會(huì)出現(xiàn)錯(cuò)誤:

{s[0]=3s[1]='n's[2]='e's[3]='w'}

var

s:string;

p:pchar;

begin

s:='new';

label1.caption:=s;{new}

label2.caption:=intTostr(integer(s[0]));{3是字符串的長(zhǎng)度}

p:=@s[1];{不是以0結(jié)尾,莫用pchar型指針}

label3.caption:=strpas(p);{運(yùn)行時(shí)出現(xiàn)錯(cuò)誤}

end;例2:在字符串結(jié)尾人工加入0即char(0),可使用指向字符串的指針。

{s[0]=4s[1]='n's[2]='e's[3]='w's[4]=0;}

{p-->'new'}

var

s:string;

p:pchar;

begin

p:=@s[1];

s:='new'+char(0);{以0結(jié)尾,可用pchar型指針}

label1.caption:=strpas(p);{new}注意:procedure

GetM

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論