在C中定義字串有下列幾種形式:字串常量,char陣列,char指標
1.字串常量
即:位於一對雙括號中的任何字元。雙引號裡的字元加上編譯器自動提供的結束標誌\0字元,作為
一個字串儲存在記憶體中。如:printf("%s","hello"); //"hello"
如果字串文字中間沒有間隔或間隔的是空格符,ANSI C 會將其串聯起來。例:
char greeting[50] = "hello,and" "how are" "you";
等價於:
char greeting[50] = "hello,and how are you";
字串常量屬於靜態儲存類。靜態儲存是指如果在一個函式中使用字串常量,即使是多次呼叫了這個函式,
該字串在程式的整個執行過程中只儲存一份。整個引號的內容作為指向該字串儲存位置的指標。這一點與
把陣列名作為指向陣列儲存位置的指標類似。
2.字串陣列及其初始化
初始化例子:
char m[40] = "hello,world"; //定義字串陣列時必須指定陣列大小(整型常量),在指定大小時,要確保陣列的大小比預定的大一個,因為編譯器會自動新增'\0'。
//多餘的元素會初始化為'\0'
char m={'h','e','l','\0'}; //注意標誌結束的空字元,若沒有它,得到的只是一個字元陣列而不是字串
3.利用char指標定義字串
char *m = "hello,world"; //自動新增'\0'
注意:此時字串指標m指向字串常量,不成用*(m+1)='o'修改此常量,因為這個字串常量放在常量區不能被修改
4.陣列和指標
陣列形式和指標形式有什麼不同呢?
陣列形式: char m[40] = "hello,world";
指標形式: char *m = "hello,world";
陣列形式:
編譯器會把陣列名m看作是陣列首元素的地址&m[0]的同義詞,m是個地址常量。可以用m+1來標識數組裡的下一個元素,但不能使用++m,增量運算子只能在變數前使用, 而不能在常量前使用。
m[40]在計算機記憶體中被分配一個有40個元素的陣列(其中每個元素對應一個字元,還有一個附加的元素對應結束的空字元'\0')。每個元素都被初始化為相應的字元。
通常,被引用的字串儲存在可執行檔案的資料段部分;當程式被載入到記憶體中時,字串也被載入到記憶體中,把被引用的字串複製到陣列中
指標形式:
指標形式(*m)也會在靜態儲存區為字串預留空間。此外,一旦程式開始執行,還要為指標變數m另外預留一個儲存位置,以在該指標變數中能夠儲存字串的地址。
m指向字串的第一個字元,可用++m指向第二個字元。 指標m是個變數
在C中定義字串有下列幾種形式:字串常量,char陣列,char指標
1.字串常量
即:位於一對雙括號中的任何字元。雙引號裡的字元加上編譯器自動提供的結束標誌\0字元,作為
一個字串儲存在記憶體中。如:printf("%s","hello"); //"hello"
如果字串文字中間沒有間隔或間隔的是空格符,ANSI C 會將其串聯起來。例:
char greeting[50] = "hello,and" "how are" "you";
等價於:
char greeting[50] = "hello,and how are you";
字串常量屬於靜態儲存類。靜態儲存是指如果在一個函式中使用字串常量,即使是多次呼叫了這個函式,
該字串在程式的整個執行過程中只儲存一份。整個引號的內容作為指向該字串儲存位置的指標。這一點與
把陣列名作為指向陣列儲存位置的指標類似。
2.字串陣列及其初始化
初始化例子:
char m[40] = "hello,world"; //定義字串陣列時必須指定陣列大小(整型常量),在指定大小時,要確保陣列的大小比預定的大一個,因為編譯器會自動新增'\0'。
//多餘的元素會初始化為'\0'
char m={'h','e','l','\0'}; //注意標誌結束的空字元,若沒有它,得到的只是一個字元陣列而不是字串
3.利用char指標定義字串
char *m = "hello,world"; //自動新增'\0'
注意:此時字串指標m指向字串常量,不成用*(m+1)='o'修改此常量,因為這個字串常量放在常量區不能被修改
4.陣列和指標
陣列形式和指標形式有什麼不同呢?
陣列形式: char m[40] = "hello,world";
指標形式: char *m = "hello,world";
陣列形式:
編譯器會把陣列名m看作是陣列首元素的地址&m[0]的同義詞,m是個地址常量。可以用m+1來標識數組裡的下一個元素,但不能使用++m,增量運算子只能在變數前使用, 而不能在常量前使用。
m[40]在計算機記憶體中被分配一個有40個元素的陣列(其中每個元素對應一個字元,還有一個附加的元素對應結束的空字元'\0')。每個元素都被初始化為相應的字元。
通常,被引用的字串儲存在可執行檔案的資料段部分;當程式被載入到記憶體中時,字串也被載入到記憶體中,把被引用的字串複製到陣列中
指標形式:
指標形式(*m)也會在靜態儲存區為字串預留空間。此外,一旦程式開始執行,還要為指標變數m另外預留一個儲存位置,以在該指標變數中能夠儲存字串的地址。
m指向字串的第一個字元,可用++m指向第二個字元。 指標m是個變數