正文 第32章 指針5(1 / 2)

C語言不提供字符串數據類型,存儲和處理字符串時要借助於字符數組。隻要保證字符串是以空字符“\0”結尾,任何一維字符數組都可以用來存儲字符串。字符串變量可以在定義時進行初始化。例如:

charstr[]={H,e,l,l,o,\0};

這種初始化方法比較麻煩,C語言提供了一種快速初始化字符數組的方法:

charstr[]={"Hello"};

甚至可以把兩邊的花括號也省略掉:

charstr[]="Hello";

這裏“Hello”盡管看上去像一個字符串常量,但實際上並不是,它隻是第一種初始化列表的另一種寫法。編譯器會把“Hello”中的字符複製到字符數組str中,然後追加一個空字符,從而使字符數組str可以作為字符串來使用。

對於字符串,除了可以用數組名來引用和處理它以外,也可以用字符數組來存放,而用字符指針來處理。

[例109]輸出字符串。

voidmain()

charstr[]="Hello",*pstr;

pstr=str;

printf("%s\n",str);

printf("%s\n",pstr);

printf("%s\n",++pstr);

程序輸出結果:

Hello

Hello

ello

程序說明:

(1)從程序中可以看出,用數組名和字符指針變量都可以來引用字符串。

(2)字符指針變量可以移動,但數組名不可以。

若定義一個字符指針變量,並用字符串常量對它初始化,或者用字符串常量直接對它賦值。該字符串常量的首地址就存放在字符指針變量中。例如:

char*pstr="Hello";

等價於下麵兩行:

char*pstr;

pstr="Hello";

這裏定義了一個字符指針變量pstr,用來存放字符串常量“Hello”的首地址,而不是將字符串常量“Hello”放在字符指針變量pstr中。

[例1010]從給定的字符串“Helloworld”中取出子字符串“world”。

voidmain()

char*pstr="Helloworld";

pstr=pstr+6;

printf("%s\n",pstr);

運行結果為:

world

雖然字符數組和字符指針變量都能實現字符串的處理,但它們之間是有區別的,不能混為一談。如果需要修改字符串,那麼隻能定義字符數組來存儲字符串。

[例1011]將字符串a複製到字符串b中。

分析:字符串b是複製值,是字符串,所以必須定義為字符指針數組;而字符串a的值不會變,所以可以采用兩種方式來定義。