C風格字串
阿新 • • 發佈:2018-11-12
學過C語言的應該知道C風格的字串形式是比較複雜的,這種風格的字串其實是字元型陣列。以下兩種形式是等價的。
#include <iostream>
using namespace std;
int main()
{
char s1[] = "Hello";
char s2[] = {'H', 'e', 'l', 'l', 'o', '\0'};
cout << s1 << endl;
cout << s1 + 1 << endl;
cout << *(s1 + 1) << endl;
cout << s1[1] << endl;
cout << s2 << endl;
cout << s2 + 1 << endl;
cout << *(s2 + 1) << endl;
cout << s2[1] << endl;
return 0;
}
執行結果
可以看出,以上兩種方式是等價的。然而,字元行陣列與數值型陣列有很大的不同:
- 數值型陣列的陣列名是可以作為首元素的地址,而字元型陣列的陣列名字串;
- 數值型陣列的的首地址的偏移量是對應索引值的元素地址,而字元型地址的陣列名的“偏移量”表示的是對應索引值之後的元素。
當然也有相同的地方:讀取陣列對應索引元素的操作是一樣的(可以根據索引得到,也可以根據計算偏移量然後取地址內容得到)。
另外,提幾點需要注意的位置:
- 字元型陣列是以
\0
結尾的,表示的是該字串的結束,這個結束符佔有一個位元組(一個字元)。 - 結果表明,即使沒有
\0
結尾仍能得到一樣的結果,並且沒有資料說明的會出現垃圾值,這是否是編譯器在編譯時加上\0
呢? - 結果表明,字元型陣列也能如同動態陣列一樣進行越界操作,且會以某種規則得到相應結果,這是非常奇怪的一點,不知是否與系統平臺或者編譯器有關,但需要指出的是,C風格的字串真的不好用。