C++字符串與指針
在C++中可以用3種方法訪問(wèn)一個(gè)字符串(在第5章介紹了前兩種方法)。
用字符數(shù)組存放一個(gè)字符串
【例】定義一個(gè)字符數(shù)組并初始化,然后輸出其中的字符串。
#include <iostream>using namespace std;int main( ){ char str[]="I love CHINA!"; cout<<str<<endl; return 0;}
運(yùn)行時(shí)輸出:
I love CHINA!
用字符串變量存放字符串
【例】定義一個(gè)字符串變量并初始化,然后輸出其中的字符串。
#include <string>#include <iostream>using namespace std;int main( ){ string str="I love CHINA!"; cout<<str<<endl; return 0;}用字符指針指向一個(gè)字符串
【例】定義一個(gè)字符指針變量并初始化,然后輸出它指向的字符串。
#include <iostream>using namespace std;int main( ){ char *str="I love CHINA!"; cout<<str<<endl; return 0;}對(duì)字符串中字符的存取,可以用下標(biāo)方法,也可以用指針?lè)椒ā?/p>
【例】將字符串str1復(fù)制為字符串str2。
定義兩個(gè)字符數(shù)組str1和str2,再設(shè)兩個(gè)指針變量p1和p2,分別指向兩個(gè)字符數(shù)組中的有關(guān)字符,通過(guò)改變指針變量的值使它們指向字符串中的不同的字符,以實(shí)現(xiàn)字符的復(fù)制。
#include <iostream>using namespace std;int main( ){ char str1[]="I love CHINA!",str2[20],*p1,*p2; p1=str1;p2=str2; for(;*p1!='//0';p1++,p2++) *p2=*p1; *p2='//0'; p1=str1;p2=str2; cout<<"str1 is: "<<p1<<endl; cout<<"str2 is: "<<p2<<endl; return 0;}運(yùn)行結(jié)果為:
str1 is: I love CHINA!str2 is: I love CHINA!

這個(gè)例子用來(lái)說(shuō)明怎樣使用字符指針。其實(shí),對(duì)例6.13來(lái)說(shuō),用string變量來(lái)處理是十分簡(jiǎn)單的:
string str1=″I love CHINA!″,str2; //定義string變量 str2=str1; //將str1復(fù)制到str2
C++數(shù)組與指針
指向數(shù)組元素的指針
一個(gè)變量有地址,一個(gè)數(shù)組包含若干元素,每個(gè)數(shù)組元素都在內(nèi)存中占用存儲(chǔ)單元,它們都有相應(yīng)的地址。指針變量既然可以指向變量,當(dāng)然也可以指向數(shù)組元素(把某一元素的地址放到一個(gè)指針變量中)。所謂數(shù)組元素的指針就是數(shù)組元素的地址。
int a[10]; //定義一個(gè)整型數(shù)組a,它有10個(gè)元素 int *p; //定義一個(gè)基類型為整型的指針變量p p=&a[0]; //將元素a[0]的地址賦給指針變量p,使p指向a[0]
在C++中,數(shù)組名代表數(shù)組中第一個(gè)元素(即序號(hào)為0的元素)的地址。因此,下面兩個(gè)語(yǔ)句等價(jià):
p=&a[0]; p=a;
在定義指針變量時(shí)可以給它賦初值:
int *p=&a[0]; //p的初值為a[0]的地址
也可以寫成
int *p=a; //作用與前一行相同
可以通過(guò)指針引用數(shù)組元素。假設(shè)p已定義為一個(gè)基類型為整型的指針變量,并已將一個(gè)整型數(shù)組元素的地址賦給了它,使它指向某一個(gè)數(shù)組元素。如果有以下賦值語(yǔ)句:
*p=1; //對(duì)p當(dāng)前所指向的數(shù)組元素賦予數(shù)值1
如果指針變量p已指向數(shù)組中的一個(gè)元素,則p+1指向同一數(shù)組中的下一個(gè)元素。
如果p的初值為&a[0],則:
1) p+i和a+i就是a[i]的地址,或者說(shuō),它們指向a數(shù)組的第i個(gè)元素,見(jiàn)圖6.12。
2) *(p+i)或*(a+i)是p+i或a+i所指向的數(shù)組元素,即a[i]。
可以看出,[]實(shí)際上是變址運(yùn)算符。對(duì)a[i]的求解過(guò)程是: 先按a+i×d計(jì)算數(shù)組元素的地址,然后找出此地址所指向的單元中的值。
3) 指向數(shù)組元素的指針變量也可以帶下標(biāo),如p[i]與*(p+i)等價(jià)。
根據(jù)以上敘述,引用一個(gè)數(shù)組元素,可用以下方法:
下標(biāo)法,如a[i]形式;
指針?lè)ǎ?(a+i)或*(p+i)。其中a是數(shù)組名,p是指向數(shù)組元素的指針變量。如果已使p的值為a,則*(p+i)就是a[i]。可以通過(guò)指向數(shù)組元素的指針找到所需的元素。使用指針?lè)苁鼓繕?biāo)程序質(zhì)量高。
【例】輸出數(shù)組中的全部元素。假設(shè)有一個(gè)整型數(shù)組a,有10個(gè)元素。要輸出各元素的值有3種方法:
1) 下標(biāo)法。
#include <iostream>using namespace std;int main( ){ int a[10]; int i; for(i=0;i<10;i++) cin>>a[i]; //引用數(shù)組元素a[i] cout<<endl; for(i=0;i<10;i++) cout<<a[i]<<" "; //引用數(shù)組元素a[i] cout<<endl; return 0;}運(yùn)行情況如下: