在這里我們需要搞清楚的是:指針是“指向”另外一種類型的復合類型。類似于引用,指針也實現了對其他對象的間接訪問,但是指針與引用有很多不同點:- 指針本身就是一個對象,我們在上一章曾經強調過,引用不是對象,他只是對象的一個別名,所以我們不能定義引用的引用,而指針可以賦值和拷貝,并且在指針的生命周期里它可以先后指向幾個不同的對象,而引用一旦定義初始化之后就不可重新綁定。
- 指針無需在定義的時候進行賦值。定義指針類型的方法是將聲明符寫成*d的形式,其中d是變量名。
int *ip //ip是指向int類型對象的指針
double *db //db是指向double類型對象的指針
指針的實質是存放某個對象的地址的變量
double dval;
double *pd = &dval //初始值是double型對象的地址
int *pi = pd //錯誤:指針pi和pd的類型不相匹配
指針的值必須是一下4種形態之一:
- 指向一個對象
- 指向緊鄰對象所占空間的下一個位置
- 空指針,意味著沒有指向任何對象
- 無效指針,及上述三種情況之外的其他值
如果指針指向了一個對象,則允許使用解引用符(操作符*)來訪問該對象:
int ival = 42;
int *p = &ival; //指針p存放著變量ival的地址,或者說p是指向變量ival的指針
cout << *p; //輸出p所指向的對象的值,即42