有章法的学习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*类型的指针可以存放任意类型的指针


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