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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值