茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    關(guān)于Delphi中的字符串的詳細(xì)分析
    來(lái)源:易賢網(wǎng) 閱讀:1780 次 日期:2015-08-27 16:41:15
    溫馨提示:易賢網(wǎng)小編為您整理了“關(guān)于Delphi中的字符串的詳細(xì)分析”,方便廣大網(wǎng)友查閱!

    只是淺淺的解析下,讓大家可以快速的理解字符串。

    其中的所有代碼均在Delphi7下測(cè)試通過(guò)。

    Delphi 4,5,6,7中有字符串類(lèi)型包括了:

    短字符串(Short String)

    長(zhǎng)字符串(Long String)

    寬字符串(Wide String)

    零結(jié)尾字符串(Null-Terminated String)、PChar和字符數(shù)組

    1、短字符串(Short String)

    固 定長(zhǎng)度,最大字符數(shù)個(gè)數(shù)為255,短字符串也成為長(zhǎng)度字節(jié)(Length-byte)字符串,這時(shí)因?yàn)槎套址牡?個(gè)元素包含了這個(gè)字符串的長(zhǎng)度(字符 串中字符的個(gè)數(shù))。因此ShortString的缺省最大長(zhǎng)度為256個(gè)字節(jié)(255個(gè)字符+1個(gè)長(zhǎng)度字節(jié)=256),聲明一個(gè)短字符串有兩種方式,如 下:

    var

    S: ShortString; { 255個(gè)字符長(zhǎng)度,256個(gè)字節(jié)}

    S1: String[255]; { S1和S的字符類(lèi)型一樣}

    Len: Integer;

    begin

    S := 'Hello';

    Len := Ord(S[0]); { Len現(xiàn)在包含S的長(zhǎng)度為5,Ord函數(shù)可以把一個(gè)字符類(lèi)型轉(zhuǎn)換為整數(shù)類(lèi)型}

    Len := SizeOf(S); { Len現(xiàn)在包含的是ShortString類(lèi)型的大小,為256字節(jié)}

    end;

    以上例子通過(guò)S[0]可以獲得S的字符串長(zhǎng)度,當(dāng)然也可以用Length函數(shù)來(lái)確定一個(gè)短字符串的長(zhǎng)度。

    可以通過(guò)數(shù)組的下標(biāo)來(lái)訪問(wèn)ShortString中的一個(gè)特定位置的字符,具體使用參看下面例子和注釋說(shuō)明:

    var

    S: string[8];

    i: Integer;

    begin

    S := 'a_pretty_darn_long_string';

    { 因?yàn)镾只有8個(gè)字符大小,

    因此s的實(shí)際存儲(chǔ)的內(nèi)容為“a_pretty”}

    i := 10;

    S[i] := 's';

    { 因?yàn)镾只有8個(gè)字符大小,

    試圖改寫(xiě)第10個(gè)元素,將會(huì)使內(nèi)存混亂}

    end;

    2、長(zhǎng)字符串(Long String)

    長(zhǎng)字符串 (AnsiString)是一種動(dòng)態(tài)分配的字符串,其大小只受可用內(nèi)存的限制。聲明一個(gè)長(zhǎng)字符串,只需要用關(guān)鍵字String不加大小參數(shù)即可。

    在Delphi 7中AnsiString包含的字符是用單字節(jié)存儲(chǔ)的。

    var

    S: string;

    由于是動(dòng)態(tài)分配的,一次可以隨意修改字符串,而不用擔(dān)心對(duì)其他的影響,也不用擔(dān)心越界的問(wèn)題。String類(lèi)型沒(méi)有0元素,試圖存取String類(lèi)型的0元素會(huì)產(chǎn)生一個(gè)編譯錯(cuò)誤。

    通過(guò)Length函數(shù)也可以獲得長(zhǎng)字符串的長(zhǎng)度,也可以通過(guò)SetLength過(guò)程為長(zhǎng)字符串設(shè)置長(zhǎng)度。其在內(nèi)存中分配情況如下:

    名單

    3、寬字符串(Wide String)

    寬字符串和長(zhǎng)字符串一樣,大小只受有效內(nèi)存的限制,并實(shí)行動(dòng)態(tài)分配。

    在Delphi 7 中WideString被實(shí)現(xiàn)為2個(gè)字節(jié)存儲(chǔ)一個(gè)字符,用WideString來(lái)處理多字節(jié)字符是十分方便的。如:

    var

    S: string;

    { 在Delphi 7中默認(rèn)string等同于AnsiString}

    WS: WideString;

    begin

    S := '世界你好';

    WS := S;

    ShowMessage(S[1]); { 此時(shí)無(wú)任何顯示,因?yàn)镾[1]取出的是‘世’的一半}

    ShowMessage(WS[1]); { 顯示‘世’}

    end;

    4、零結(jié)尾字符串(Null-Terminated String)、PChar和字符數(shù)組

    在C和C++中沒(méi)有真正的字符串?dāng)?shù)據(jù)類(lèi)型,都是通過(guò)以Null結(jié)尾(0)的字符數(shù)組來(lái)實(shí)現(xiàn)的,字符數(shù)組沒(méi)有長(zhǎng)度字節(jié),因此只能通過(guò)結(jié)尾的Null標(biāo) 志來(lái)作為字符串的字符結(jié)束標(biāo)志。又因?yàn)閃indows是用C編寫(xiě)的,很多Windows函數(shù)要用到以字符數(shù)組作為參數(shù),但Pascal字符串類(lèi)型不是字符 數(shù)組,因?yàn)闉榱俗孭ascal字符串也能與Windows兼容,就需要一個(gè)字符串?dāng)?shù)組,PChar類(lèi)型正是符合這種需求,在任何需要字符數(shù)組的地方都可用 PChar。

    雖然AnsiString和WideString都已經(jīng)實(shí)現(xiàn)了NULL

    相應(yīng)的也有PAnsiChar和PWideChar,分別對(duì)應(yīng)于AnsiChar字符和WideChar字符。

    例如:Windows MessageBox函數(shù),此函數(shù)聲明如下:

    function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;

    第二個(gè)和第三個(gè)參數(shù)需要一個(gè)指向字符數(shù)組的指針,為了可以調(diào)用此函數(shù),有以下三種方法來(lái)實(shí)現(xiàn)

    1、PChar()類(lèi)型轉(zhuǎn)換

    var

    Text: string;

    Caption: string;

    begin

    Text := 'This is a test.';

    Caption := 'Test Message';

    MessageBox(0, PChar(Text), PChar(Caption), 0);

    { 這里PChar用來(lái)把string類(lèi)型轉(zhuǎn)換為Null結(jié)尾的字符串}

    end;

    其中

    2、PChar變量

    我們先做一個(gè)實(shí)現(xiàn),看看PChar類(lèi)型到底是啥呢?

    運(yùn)行下面程序

    var

    Text: PChar; { 聲明為PChar類(lèi)型}

    Str: string; { 聲明為String類(lèi)型}

    begin

    Text := 'This is a test.'; { 都被賦予了相同的字符串}

    Str := 'This is a test.';

    ShowMessage(IntToStr(SizeOf(Text))); { 4字節(jié),實(shí)質(zhì)是指針}

    ShowMessage(IntToStr(SizeOf(Str))); { 也是4字節(jié),也是指針}

    end;

    通過(guò)上面的程序,我們知道Text只不過(guò)是一個(gè)指針而已。

    var

    Text: PChar;

    begin

    Text := 'This is a test.';

    MessageBox(0, Text, 'Test Message', 0);

    { 這里Text直接聲明為了PChar類(lèi)型,字符串常量可以直接用}

    end;

    指針Text指向了這樣一個(gè)內(nèi)存區(qū)域,一個(gè)包含Null的結(jié)尾的’This is a test’字符串的區(qū)域。其等同于下面的代碼:

    const

    TempString: array[0..15] of Char = 'This is a test.'#0;

    var

    Text: PChar;

    begin

    Text := @TempString[0];

    {Text指向Null結(jié)尾的TempString字符數(shù)組的第0個(gè)元素的地址,

    也就是整個(gè)字符數(shù)組的首地址}

    MessageBox(0, Text, 'Test Message', 0);

    end;

    3、Char類(lèi)型字符數(shù)組

    最有還可以用Char數(shù)組來(lái)代替PChar,代碼如下:

    var

    Text1: array[0..14] of Char; { 大小為15個(gè)字符}

    Text2: array[0..20] of Char; { 大小為21個(gè)字符}

    begin

    Text1 := 'This is a test.'; {Text1和Text2的字符長(zhǎng)度都為15個(gè)字符}

    Text2 := 'This is a test.';

    MessageBox(0, Text1, 'Test Message 1', 0);

    {因?yàn)門(mén)ext1的字符長(zhǎng)度超過(guò)了其聲明的大小,因?yàn)闀?huì)內(nèi)存訪問(wèn)混亂,顯示換亂}

    MessageBox(0, Text2, 'Test Message 2', 0);

    {Text2的字符長(zhǎng)度比起聲明的大小要小,因?yàn)檎TL問(wèn),顯示正確}

    end;

    顯示結(jié)果如下:

    名單

    關(guān)于字符串就先淺淺的談到這個(gè),以后再深入了解。

    更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄

    更多信息請(qǐng)查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機(jī)網(wǎng)站地址:關(guān)于Delphi中的字符串的詳細(xì)分析
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026上岸·考公考編培訓(xùn)報(bào)班

    • 報(bào)班類(lèi)型
    • 姓名
    • 手機(jī)號(hào)
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
    云南網(wǎng)警備案專(zhuān)用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專(zhuān)用圖標(biāo)