關於Pchar 摘錄

2021-04-21 23:42:56 字數 2153 閱讀 1850

乙個label的caption當作string直接加上下標去相應位置的字元,但是卻報錯,說不相容,請問delphi中的字串型別有什麼不同啊。

謝謝各位大俠!

建議先搜尋一下離線論壇!

先解釋你的疑惑:乙個字串(string型別的)變數是可以通過腳標的方式訪問指定位置的字元的,但是 label 的 caption 是乙個屬性而不是乙個簡單的字串變數,因此你不能像使用字串變數一樣簡單地加上腳標來訪問指定字元,這是語法delphi上規定的。

再來解釋你的問題:單純的pchar型別是乙個指向字元的指標(注意是指向字元而不是指向字串),就像pinteger是乙個指向整型數的指標一樣。

為什麼很多時候都用乙個pchar型別的變數來表示指向乙個字串的指標呢?因為字串中的字元是乙個挨著乙個被儲存到記憶體中的,當你知道了第乙個字元的位置的時候,你就可以通過這個位置加 1 來獲得下乙個字元的位置,因此經常用乙個pchar表示乙個字串,其實pchar變數儲存的僅僅是這個字串第乙個字元的位址而已。

再說string型別,string型別是delphi特有的乙個資料型別,簡單講,可以把他認為是乙個以0結尾的字串,你定義了乙個string型別的資料,實際上也是定義了乙個指標,這個指標很特殊,其指標的負偏移位置也是有內容的,分別記錄這這個字串的使用次數和長度,其正偏移部分記錄的就是這個字串。因此,string型別的資料是引用記數的,當引用次數為0的時候,系統就會釋放這個字串所占用的記憶體。這點上,和pchar是不一樣的。

之所以上面的朋友說string可以轉換成pchar,是因為string的正偏移部分和乙個pchar所表示的字串的結構是一致的。

暈,label的caption本來就是string型別的

pchar相當於char *,是0終止字串,string是pascal特有的,兩者可以互相轉換(直接用型別轉換就可以了)。

label 為string

pchar為'字元'=#0

二者可以互換

eg:var

str:string;

p:pchar;

procedure convertstrtopchar;

beging

p:=pchar(str);

end;

還真有學問

我記得這個字串型別有個與其他語言相容的問題,是哪個型別與其他型別相容啊,另外的是不相容的。

s:='string';

for i:=1 to length(s) do

s[i];

字串可以看成乙個從1開始的array of char

s[0]是字串的長度

pchar是指標

是array of char

的首位址

to 放飛,

其實delphi預設的string是乙個指標,不過string有幾種不同實現方式,shortstring就不是乙個指標(準確說,是幾種不同的string),shortstring相當於turbo pascal的string。

string型別並不是零終止字串,特別是它可以中間加入#0,因為string型別除了儲存字串內容之外,還儲存了長度等資訊,而且這是通過增加附加欄位來實現的。pchar則一般是零終止字串。

turbo pascal經典的string同樣也是,不過它是固定長度的,最長是255位元組,實際上第乙個位元組是length,所以實際占用的是256位元組。

pchar型別和string型別的變數可以互相轉換,只需用普通的型別轉換就行了。

另外,string的下標開始是1,如果用pchar,由於是指標,所以只能0開始,因為它是首址+偏移這樣來計算的。

雖然string預設是指標,不過在賦值或改變其值的時候不用當它是個指標,因為當你改變它的值的時候,若同一段string有多個引用,則改變的時候會拷貝乙份新的,然後在新的上面改變,這樣幾個string變數的內容就不會同時改變,這叫copy on write

所以在dll都轉換為pchar,對不

stlxv

我說的string是專指string型別,也就是生存期自管理的那個string

delphi中的短字串,是乙個通用的資料型別,可以在dll之間或者是不同的程式語言之間傳遞字串。

delphi中的string,最好不要在dll之間或者在不同程式語言之間傳遞,因為這個字串是引用記數的,一旦引用記數為0,那麼就會被自動釋放。用pchar強制轉換乙個string,也不要在dll之間使用。

關於PChar和指標

對於剛開始學程式設計的人來說,指標無疑是最大的恐懼和進步障礙了 我本人也是如此,居然畢業1年後還是見到 就怕的要命.其實現在想來,其實指標變不是什麼難的東西,而且靈活運用它能有帶來許多便利,很多人把指標比喻成門牌號碼,這個比喻是再恰當不過了,乙個門牌號碼你當然看不到,這個門牌所對應的具體的是哪個房子...

關於雜訊(各方摘錄)

白雜訊 或白雜訊,是一種功率頻譜密度為常數的隨機訊號或隨機過程。換句話說,此訊號在各個頻段上的功率是一樣的,由於白光是由各種頻率 顏色 的單色光混合而成,因而此訊號的這種具有平坦功率譜的性質被稱作是 白色的 此訊號也因此被稱作白雜訊。相對的,其他不具有這一性質的雜訊訊號被稱為有色雜訊。理想的白雜訊具...

關於XP的摘錄

以下摘錄均出自網路 xp的極限就在於它將12個眾所周知的軟體開發 最佳實踐 都發揮到了極限 10分 下面是kent beck提出的12個最佳實踐 1,計畫遊戲 通過結合使用業務優先順序和技術評估來快速確定下乙個版本的範圍。當計畫趕不上實際變化時就應更新計畫。2,小版本 將乙個簡單系統迅速投入生產,然...