2017.11.11 復合類型
2.3 復合類型
2.3.1 引用
引用就是為對象起了個別名,引用類型引用另外一種類型。通過將聲明符寫成&d的形式來定義引用類型,其中d是聲明的變量名。
int ival =1024;
int &refVal= ival; // refVal 指向ival (是ival 的另一個名字)
2.3.2 指針
指針是“指向”另外一種類型的復合類型。與引用不同,第一,指針本身就是一個對象,允許對指針賦值和拷貝,而且在指針生命周期內它可以先後指向幾個不同的對象。其二,指針無須在定義時賦值。在塊作用域內定義的指針如果沒有被初始化,也將擁有一個不確定的值。
定義指針類型的方法將聲明符寫成*d
獲取對象的地址
指針存放某個對象的地址,想要獲取該地址,需要使用取地址符&。
int ival= 42;
int *p = &ival; // p存放變量ival的地址,或者說p是指向變量ival 的指針
指針值
指針的值應屬於下列4種狀態之一:
1.指向一個對象。
2.指向緊鄰對象所占空間的下一個位置。
3.空指針,意味著指針沒有指向任何對象。
4.無效指針,也就是上述情況之外的其他值。
利指針訪問對象
如果指針指向了一個對象,則允許使用解引用符(*)來訪問該對象;
int ival = 42;
int *p= &ival; //p存放變量ival的地址
std::cout<<*p; //由符號*得到指針p所指的對象,輸出42.
對指針的解引用會得出所指對象,因此如果給解引用的結果賦值,實際上也就是給指針所指的對象賦值;
*p=0;
cout<<*p; //輸出0
空指針
空指針不指向任何對象,以下列出生成空指針的方法;
int *p = nullptr;
int *p = 0;
int *p = NULL; //需要首先#include <cstdlib>
void* 指針
void* 是一種特殊的指針類型,可用於存放任意對象的地址。
double obj = 3.14 , *pd= &obj;
void *pv=&obj;
pv=pd;
利用void* 指針能做的事比較有限:拿他和別的指針比較、作為函數的輸入或輸出,或者賦給另一個void*指針。
指向指針的指針
**表示指向指針的指針,***表示指向指針的指針的指針。
int ival=1024;
int *pi=&ival;
int **ppi=π
2017.11.11 復合類型