C++ Primer Rush 2.3 复合类型

复合类型compound type)是指基于其他类型定义的类型。C++语言有几种复合类型,本章将介绍其中的两种:引用和指针。

2.3.1 引用

引用reference)为对象起了另外一个名字,引用类型引用(refers to)另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名:

int ival = 1024;
int &refVal = ival;    //refVal指向ival(是ival的另一个名字)
int &refVal2;          //报错:引用必须被初始化

一般在初始化变量时,初始值会被拷贝到新建的对象中。然而定义引用时,程序把引用和它的初始值绑定bind)在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,因此引用必须初始化。

引用即别名:引用并非对象,相反的,它只是为一个已经存在的对象所起的另外一个名字。

定义了一个引用之后,对其进行的所有操作都是在与之绑定的对象上进行的:

refVal = 2;        //把2赋给refVal指向的对象,此处即是赋给了ival
int ii = refVal    //与ii = ival 执行结果一样
  • 因为引用本身不是一个对象,所以不能定义引用的引用。

  • 允许在一条语句中定义多个引用,其中每个引用标识符都必须以符号&开头。

  • 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定到一起。

2.3.1 指针

指针pointer)是“指向(point to)”另外一种类型的复合类型。与引用类似,指针也实现了对其他对象的间接访问。然而也有很多不同点。其一,指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。其二,指针不需要在定义时赋初值。和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。

定义指针类型的方法是将声明符写成 *d 的形式,其中 d 是变量名。如果在一条语句中定义了几个指针变量,每个变量前面都必须有符号 * 。

int *ip1, *ip2;     //ip1和ip2都是指向int型对象的指针
double dp, *dp2;    //dp2是指向double型对象的指针,dp是double型对象

指针存放某个对象的地址,要想获取该地址,需要使用取地址符(操作符&):

int ival = 42;
int *p = &ival;    //p存放变量ival的地址,或者说p是指向变量ival的指针

如果指针指向了一个对象,则允许使用解引用符(操作符*)来访问该对象:

int ival = 42;
int *p = &ival;  //p存放着变量ival的地址,或者说p是指向变量ival的指针
cout << *p;      //由符号*得到指针p所指的对象,输出42

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值