C++程序设计语言(五)——引用和指针

C++程序设计语言(五)——引用和指针

复合类型(compound type)是指基于其他类型定义的类型。通常是一个基本数据类型(base type)和紧随其后的一个声明符(declarator)列表组成。

引用(reference)

为对象起另一个名字。一般在初始化变量时,初始值会被拷贝到新建的对象中。然后定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用(引用即别名)。

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

为引用赋值,实际是把值赋给了与引用绑定的对象。获取引用的值,实际是获取了与引用绑定的对象的值。

引用的定义

可以在一条语句中定义多个引用,每个引用都以&开头且只用定义引用时&才表示引用

指向指针的引用

引用本身不是一个对象,因此不能定义指向引用的指针。但是我们可以定义指向指针对象的引用。

int i = 16;
int* p; //p是一个int类型的指针
int*& r = p; //r是一个对指针p的引用,也就是说r是p的别名

r = &i; //r引用了一个指针,因此给r赋值&i就是令p直线i
*r = 0; //对r解引用的到i,也就是p指向的对象,并将i的值改为0

指针(pointer)

它指向另一种类型的复合类型,存放着这个对象的地址。

  1. 指针本身也是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后只想几个不同的对象。
  2. 指针无须在定义时赋值。
int* ip1,* ip2; //ip1和ip2都是指向int类型对象的指针
double dp,* dp2; //dp是double类型的对象,dp2是指向double类型对象的指针

获取对象的地址

想要获取一个对象的地址需要使用取址符&。

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

指针值

  1. 指向一个对象
  2. 指向紧邻对象所占空间的下一个位置
  3. 空指针
  4. 无效指针,试图拷贝或者其他方式访问无效指针的值都会引发错误。

利用指针访问对象

如果一个指针指向一个对象,可以使用解引用符*来访问该对象。同时,与引用类似,修改了这个对象的值的同时,对所有指向该对象的指针解引用得到的值都发生改变。

空指针(null pointer)

空指针不指向任何对象,在使用一个指针之前我们应当检查这个指针是否为空。如果我们想要得到一个空指针,我们应当使用字面值nullptr来初始化指针(定义一个指针时,如果不用其他对象初始化,一定要使用nullptr来初始化这个指针,未初始化的指针常常会引发一系列错误

:nullptr是C++11新标准刚刚引入的一种方法。如果你想要使用,请确保你的编译器中是C++11标准。

void* 指针

void*指针可以用于存放任意对象的地址。所以当使用的时候,我们也并不知道该地址中是一个什么类型的对象。

指向指针的指针

我们可以通过* 的个数来区分指针的级别。* *表示指向指针的指针, * * *表示指向指针的指针的指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值