C風格字符串

學過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風格的字符串真的不好用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章