1. 程式人生 > >2017.11.11 復合類型

2017.11.11 復合類型

其他 先後 無效 2.3 方法 位置 對象賦值 clu ext

2.3 復合類型

2.3.1 引用

引用就是為對象起了個別名,引用類型引用另外一種類型。通過將聲明符寫成&d的形式來定義引用類型,其中d是聲明的變量名。

int ival =1024;

int &refVal= ival; // refVal 指向ival (是ival 的另一個名字)

2.3.2 指針

指針是“指向”另外一種類型的復合類型。與引用不同,第一,指針本身就是一個對象,允許對指針賦值和拷貝,而且在指針生命周期內它可以先後指向幾個不同的對象。其二,指針無須在定義時賦值。在塊作用域內定義的指針如果沒有被初始化,也將擁有一個不確定的值。

定義指針類型的方法將聲明符寫成*d

的形式,其中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=&pi;

2017.11.11 復合類型