有章法的學習c++(8)複合類型

複合類型是指基於其他類型定義的類型。
我們先研究兩種類型:引用和指針。


引用

note:c++11中新增了一種引用:所謂的“右值引用”,我們將會在後面具體的學習。當我們提到引用時,指的是“左值引用”。


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

int value = 1024;

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

int &value2; //錯誤,引用類型必須初始化


引用即別名:引用並非對象,相反,它只是一個已經存在的對象所起的另外一個名字。


定義一個引用之後,對其進行的所有的操作都是在與之對應的對象上進行的。

d = 2; //把2賦給d指向的對象,此處即是賦給value

int a = d; //與a = value的結果一樣。



指針

指針是指向另外一種類型的複合類型。

定義指針的方法是將聲明符寫成*d的形式,其中d是變量名。

int *p1,*p1;//p1,p2都是指向int型對象的地址

double *q1,*q2;//q1,q2都是指向double型對象的地址

獲取對象的地址

指針指向某個對象的地址,獲取對象的地址使用取地址符(&)。

int a = 2;

int *b = &a;

第二句定義了一個int型指針b,隨後初始化b令其指向int型對象

所有指針的類型都要和它指向的類型嚴格匹配

int a = 1;

double *b = a;//錯誤

利用指針訪問對象

如果指針指向了一個對象,則允許使用解引用符(操作符*)來訪問該對象。

int val = 4;

int *p = val;

cout << *p;//由符號*得到指針所指向的對象

空指針

空指針不指向任何對象,在試圖使用一個空指針之前代碼可以首先檢查它是否爲空。

以下爲幾種生成空指針的方法:

int *p1 = nullptr;//c++11新規範,等價於int *p1 = 0;

int *p2 = 0;//需要先#include cstdlib

int *p3 = NULL;//等價於int *p3 = 0;需要先包含頭文件。NULL爲預處理變量

最好使用nullptr,同時儘量避免使用NULL

賦值和指針

引用和指針都能提供對對象的間接訪問。

然而具體的實現細節中,二者有很大的不一樣,最重要的就是引用不是對象,在使用方面會到一個引用無法二次賦值的受限。

指針卻是無限制的,它可以和普通的對象一樣使用。

void*指針

void*類型的指針可以存放任意類型的指針


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章