字元指標
定義及初始化:
char *strs="hello,world!"
char *strs;
str = "hello,world!";
字串中的所有字元在記憶體中是連續排列的,strs指向的是字串的第0個字元(從零開始);我們通常將第0個字元的位址稱為字串的首位址。字串中每個字元的型別都是char,所以 str 的型別也必須是char *。
訪問方法:
printf("%s\n",strs); //訪問整個字串
printf("%c\n",strs[1]); //訪問單個字串
printf("%c\n",*(strs+1));
hello,world!e
e
注意:由於字元指標指向的常量區存放在常量區,因而程式中只有讀取許可權,而沒有修改許可權。如xia下面的操作,編譯器可能會通過,但在執行時會出現段錯誤(segment fault)或者寫入位置錯誤。
strs[1]='0'; //錯誤,沒有修改許可權
*(strs+1)='0'; //錯誤,沒有修改許可權
字元陣列
定義及初始化:
char str1=;
char str2="hello,world!"
將12個字元分別賦給str[0]到str[11]12個元素。如果花括號中提供的字元個數大於陣列長度,則按語法錯誤處理;若小於陣列長度,則只將這些字元陣列中前面那些元素,其餘的元素自動定為空字元(即』\0』)。
在c語言中,並沒有特定的字串型別,通常是將字串放在乙個字元陣列中。然而我們比較關心的是字串的長度,而不是字元陣列的長度,因此通常在字串的末尾加上』\0』,表示字元結束的標誌。在讀取字串時也已唯讀到』\0』為止。
因此也可以使用下面的方法定義初始化字串:
char str2="hello,world!"
但是字元陣列定義之後再賦值時只能逐個進行賦值而不能一次統一賦值,如下面的操作是錯誤的:
char
str;
str = "hello,world!"; //錯誤
字元陣列統一賦值和逐個賦值導致陣列大小並不一致,因為單個賦值相當於將字元逐個放入陣列元素中,陣列並不要求』\0』結尾。而字串必須以』\0』結尾,如果不加』\0』系統會自動加上。因此
sizeof(str1)=13;
sizeof(str2)=12;
訪問方法:
printf("%s",str1);
printf("%c",str2[1]);
printf(""
*&str2[1]);
printf("%c",*(str2)); //不合法
字元陣列儲存在全域性資料區或棧區,在定義和賦值後可以進行修改操作。這是其與字元指標顯著的區別。
char str2="hello,world!"
str2[2]='0'; //合法
總結
字元指標與字元陣列的作用基本相同,但在涉及到對字串內容需要修改時,只能選擇字元陣列,而不能選擇字元指標。
參考文獻
[1]
[2]
[3]
字元陣列與字元指標
10.4 指標與字串 10.4.1 字元陣列與字元指標 在第八章中我們已經詳細討論了字元陣列與字串,字元指標也可以指向乙個字串。我們可以用字串常量對字元指標進行初始化。例如,有說明語句 char str this is a string.是對字元指標進行初始化。此時,字元指標指向的是乙個字串常量的首...
字元指標與字元陣列
1.字元指標可以指向乙個字串。我們可以用字串常量對字元指標進行初始化。例如,有說明語句 char str this is a string.是對字元指標進行初始化。此時,字元指標指向的是乙個字串常量的首位址,即指向字串的首位址。這裡要注意字元指標與字元陣列之間的區別。例如,有說明語句 char st...
字元陣列與字元指標
節選了一些有價值和易錯的部分。char str this is a string.char string this is a string.字元指標str與字元陣列string的區別是 str是乙個變數,可以改變str使它指向不同的字串 但不能改變str所指的字串常量 string是乙個陣列,可以改...