1. 程式人生 > >C風格字串

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風格的字串真的不好用。