string類在c++與c#中都是一種經常使用的型別,對字串的操作比對字元陣列的操作方便很多,今天在這裡記錄一下c++和c#中的string的區別與注意事項。
在c++中,string的每乙個字串的結尾都是字元'\0',因此字串的占用的記憶體比表面上使用的位元組數多一。在c++中需要注意的是,c++將const字串儲存在常量儲存區,當多個指標指向同乙個const字串時,者幾個指標指向的記憶體位址是相同的,例如如下**:
int main()
else
if (str3 == str4)
else
cin >> c;
return 0;
}
在這段**中,我們得到的輸出結果為:
str1 and str2 are different
str3 and str4 are same
因為str1和str2是陣列,我們會分配相應位元組數的空間然後將字串內容複製到相應陣列重區,因此他們的位址是不同的,但是str3和str4是指標,我們不需要分配空間來儲存string內容,又因為"string"是乙個cosnt字串,因此在記憶體中只有乙個拷貝,所以他們指向的位址為同乙個位址。
在c#中,string類是引用型別的資料型別。它有乙個非常特殊的性質:string的內容是不能改變的,一旦試圖改變string的內容,就會產生乙個新的string例項,例如如下**:
class program
}
程式輸出結果為:
string
string
string
可以看出string呼叫其成員函式不會修改自身的值,而是返回對應結果形成乙個新的例項。
由於每一次生成乙個新的例項有些開銷過大,因此在c#中有乙個新的型別stringbuilder,可以容納修改後的結果,因此對於需要連續多次修改的string,可以考慮使用stringbuilder。
redis 字串與 c字串的區別
c語言關於 字串 的說明 1,c語言中沒有 字串 的概念,實際上在c之中字串是長度為 n 1的字元陣列限制。2,c語言對於字串的操作是很麻煩的,因為c字串的長度與底層陣列的長度之間存在關聯性,所以每次增長或者縮短乙個字串,程式都要對儲存這個字串盡心一次記憶體重新分配。redis 字串實現是 sds ...
C 中位元組 字元 字串的區別
先看一下位元組,字元,字串的概念 c 中 定義位元組byte 字元char 字串string 定義陣列時都需定義陣列大小。byte by 84 t 對應的ascii十進位制編碼 char ch t string str this byte可以和char直接進行比較,例如 by 83 char cha...
c中字元陣列和字串的區別
c語言字元陣列和字串的區別,字元陣列是乙個儲存字元的陣列,而字串是乙個用雙括號括起來的以 0 結束的字串行,雖然字串是儲存在字元陣列中的,但是一定要注意字串的結束標誌是 0 所以c得字串函式不需要傳遞長度的原因都是通過結束識別符號 0 來決定的。通常字元陣列中的所儲存的內容也可以稱為字串,char ...