


下載本文檔
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 平板租賃合同范本
- 承建大棚合同范本
- 年度財(cái)務(wù)健康檢查的重要性計(jì)劃
- 建立反饋機(jī)制以促進(jìn)持續(xù)改進(jìn)計(jì)劃
- 社區(qū)與學(xué)校的合作項(xiàng)目計(jì)劃
- 服裝加工合同范本
- 煙葉裝卸合同范本
- 木制容器企業(yè)文化建設(shè)考核試卷
- 信息安全在保安工作中的重要性計(jì)劃
- 牛羊肉禽雞肉加工行業(yè)新年個(gè)人工作計(jì)劃
- 社區(qū)養(yǎng)老驛站運(yùn)營(yíng)方案模版
- 鐵道概論(高職)PPT完整全套教學(xué)課件
- 一年級(jí)體育課教案下冊(cè)
- 廖常初《FX系列LC編程及應(yīng)用》課后習(xí)題答案
- 輪狀病毒性腸炎
- 正大集團(tuán)大豬場(chǎng)開發(fā)流程
- 高中政治必修四知識(shí)體系每單元的總體框架
- GB/T 41255-2022智能工廠通用技術(shù)要求
- GB/T 41029-2021石油天然氣鉆井海洋棄井作業(yè)規(guī)程
- 深入推進(jìn)依法行政
- GB/T 4026-1992電器設(shè)備接線端子和特定導(dǎo)線線端的識(shí)別及應(yīng)用字母數(shù)字系統(tǒng)的通則
評(píng)論
0/150
提交評(píng)論