在C中定義字符串有下列幾種形式:字符串常量,char數(shù)組,char指針 1.字符串常量 即:位于一對雙括號中的任何字符。雙引號里的字符加上編譯器自動提供的結(jié)束標志\0字符,作為 一個字符串存儲在內(nèi)存中。如:printf('%s','hello'); //'hello' 如果字符串文字中間沒有間隔或間隔的是空格符,ANSI C 會將其串聯(lián)起來。例: char greeting[50] = 'hello,and' 'how are' 'you'; 等價于: char greeting[50] = 'hello,and how are you'; 字符串常量屬于靜態(tài)存儲類。靜態(tài)存儲是指如果在一個函數(shù)中使用字符串常量,即使是多次調(diào)用了這個函數(shù), 該字符串在程序的整個運行過程中只存儲一份。整個引號的內(nèi)容作為指向該字符串存儲位置的指針。這一點與 把數(shù)組名作為指向數(shù)組存儲位置的指針類似。 2.字符串數(shù)組及其初始化 初始化例子: char m[40] = 'hello,world'; //定義字符串數(shù)組時必須指定數(shù)組大?。ㄕ统A浚谥付ù笮r,要確保數(shù)組的大小比預(yù)定的大一個,因為編譯器會自動添加'\0'。 //多余的元素會初始化為'\0' char m={'h','e','l','\0'}; //注意標志結(jié)束的空字符,若沒有它,得到的只是一個字符數(shù)組而不是字符串 3.利用char指針定義字符串 char *m = 'hello,world'; //自動添加'\0' 注意:此時字符串指針m指向字符串常量,不成用*(m+1)='o'修改此常量,因為這個字符串常量放在常量區(qū)不能被修改 4.數(shù)組和指針 數(shù)組形式和指針形式有什么不同呢? 數(shù)組形式: char m[40] = 'hello,world'; 指針形式: char *m = 'hello,world'; 數(shù)組形式: 編譯器會把數(shù)組名m看作是數(shù)組首元素的地址&m[0]的同義詞,m是個地址常量。可以用m+1來標識數(shù)組里的下一個元素,但不能使用++m,增量運算符只能在變量前使用, 而不能在常量前使用。 m[40]在計算機內(nèi)存中被分配一個有40個元素的數(shù)組(其中每個元素對應(yīng)一個字符,還有一個附加的元素對應(yīng)結(jié)束的空字符'\0')。每個元素都被初始化為相應(yīng)的字符。 通常,被引用的字符串存儲在可執(zhí)行文件的數(shù)據(jù)段部分;當程序被加載到內(nèi)存中時,字符串也被加載到內(nèi)存中,把被引用的字符串復(fù)制到數(shù)組中 指針形式: 指針形式(*m)也會在靜態(tài)存儲區(qū)為字符串預(yù)留空間。此外,一旦程序開始執(zhí)行,還要為指針變量m另外預(yù)留一個存儲位置,以在該指針變量中能夠存儲字符串的地址。 m指向字符串的第一個字符,可用++m指向第二個字符。 指針m是個變量。 熱心網(wǎng)友 2014-10-29
|
|