?? 字符串與指針.txt
字號:
7.2.3字符串與指針
1.字符串與字符串指針
字符串是存放在字符數(shù)組中的,對字符數(shù)組中的字符逐個處理時,前面介紹的指針與數(shù)組之間的關(guān)系完全適用于字符數(shù)組。通常將字符串作為一個整體來使用,用指針來處理字符串更加方便。當(dāng)用指向字符串的指針來處理字符串時,并不關(guān)心存放字符串的數(shù)組大小,而只關(guān)心是否已處理到字符串的結(jié)束符。
【例7.10】用指針實(shí)現(xiàn)字符串拷貝。
# include <iostream.h>
# include <string.h>
void main(void)
{ char *p1="I am a student" ;
char s1[30],s2[30];
strcpy( s1,p1); //用命令拷貝字符串
char *p2=s2; //將數(shù)組s2首地址賦p2
for (;*p2++=*p1++;); //用指針拷貝字符串
cout<<"s1="<<s1<<endl;
cout<<"s2="<<s2<<endl;
}
執(zhí)行后輸出:
s1= I am a student
s2= I am a student
說明:
(1)編譯系統(tǒng)執(zhí)行定義語句char *p1="I am a student" 時,首先為字符串"I am a student "分配內(nèi)存空間,然后將該內(nèi)存空間首地址賦給指針變量p1。
(2)用指針變量拷貝字符串過程是,先將指針變量p2指向字符串?dāng)?shù)組s2的首地址,然后通過賦值語句*p2=*p1將字符由字符串s1中拷貝到s2中,再移動p1、p2到下一個字符單元,依次循環(huán)直到字符串結(jié)束符'\0'為止,如圖7.8所示。全部拷貝過程用一個for語句完成。在for(;*p2++=*p1++;)語句中,表達(dá)式:
*p2++=*p1++ 等價于下列三條語句,
*p1=*p2; // s2[i]=s1[i],將指針p1所指s1[i]賦給指針p1所指s2[i]。
p1++; //指針p1加1指向s1的下一個元素
p2++; //指針p2加1指向s2的下一個元素
上述語句不斷循環(huán),直到p1指向結(jié)束字符'\0'=0時,for 語句因條件為假而結(jié)束。從而完成字符串s1拷貝到字符數(shù)組s2的任務(wù)。
(3)指針變量p1可以作為拷貝函數(shù)strcpy(s1,p1)的參數(shù)。
2.字符型指針變量與字符數(shù)組的區(qū)別
(1)分配內(nèi)存
設(shè)有定義字符型指針變量與字符數(shù)組的語句如下:
char *pc ,str[100];
則系統(tǒng)將為字符數(shù)組str分配100個字節(jié)的內(nèi)存單元,用于存放100個字符。而系統(tǒng)只為指針變量pc分配4個存儲單元,用于存放一個內(nèi)存單元的地址。
(2)初始化賦值含義
字符數(shù)組與字符指針變量的初始化賦值形式相同,但其含義不同。例如:
char str[ ] ="I am a student ! " ,s[200];
char *pc="You are a student ! " ;
對于字符數(shù)組,是將字符串放到為數(shù)組分配的存儲空間去,而對于字符型指針變量,是先將字符串存放到內(nèi)存,然后將存放字符串的內(nèi)存起始地址送到指針變量pc中。
(3)賦值方式
字符數(shù)組只能對其元素逐個賦值,而不能將字符串賦給字符數(shù)組名。對于字符指針變量,字符串地址可直接賦給字符指針變量。例如:
str="I love China! "; //字符數(shù)組名str不能直接賦值,該語句是錯誤的。
pc="I love China! "; //指針變量pc可以直接賦字符串地址,語句正確
(4)輸入方式
可以將字符串直接輸入字符數(shù)組,而不能將字符串直接輸入指針變量。但可將指針變量所指字符串直接輸出。
例如: cin >> str //正確
cin >> pc //錯誤
cout<<pc //正確
(5)值的改變
在程序執(zhí)行期間,字符數(shù)組名表示的起始地址是不能改變的,而指針變量的值是可以改變的。例如:str=str+5; //錯誤
pc=str+5; //正確
小結(jié) 字符數(shù)組s[100] 指針變量pc
(1)分配內(nèi)存 分配100個單元 分配4個單元。
(2)賦值含義 字符串放到數(shù)組存儲空間 先將字符串存放到內(nèi)存
將存放串的首地址送到pc中。
(3)賦值方式 只能逐個元素賦值 串地址可賦給pc
(4)輸入方式: 串直接輸入字符數(shù)組 不能將字符串直接輸入指針變量
(5)值的改變: 字符數(shù)組首地址不能改變 指針變量的值可以改變
由以上區(qū)別可以看出,在某些情況下,用指針變量處理字符串,要比用數(shù)組處理字符串方便。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -