复合类型——引用和指针

复合类型是指基于其他类型定义的类型。介绍两种复合类型:引用和指针。

C++11中新增了一种引用,“右值引用”——主要是基于内置类。使用术语“引用”时是指“左值引用”。

引用&

为对象起了另外一个名字,引用类型引用另一种类型。引用必须被初始化。一般在初始化变量时,初始值会被拷贝到新建的对象中。然而定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。

int ival = 1024;

int &refval=ival;    //refval指向ival(是ival的另一个名字)

void*是一种特殊类型的指针,可用于存放任意对象的地址。

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。引用智能绑定在对象上,不能与某个字面值或某个表达式的计算结果绑定在一起。

指针

指针是指向另一种类型的复合变量。与引用类似,指针也实现了对其他对象的间接访问。指针与引用的不同:指针本身就是一个对象,允许对指针赋值和拷贝,而且指针的声明周期内它可以先后指向几个不同的对象;指针无需在定义是赋初值。

扫描二维码关注公众号,回复: 4834328 查看本文章

获取对象的地址

int ival=42;

int *p=&ival;        //p存放变量ival的地址

指针存放某个对象的地址,&为取地址运算符。引用不是对象,没有实际地址,所以不能定义指向引用的指针。

C++ 引用 vs 指针

引用很容易与指针混淆,它们之间有三个主要的不同:

不存在空引用。引用必须连接到一块合法的内存。

一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。

说明指针和引用的主要区别

1 引用是另一个对象的别名,而指针本身就是一个对象。

2 引用必须初始化,并且一旦定义了引用就无法再绑定到其他对象。而指针无须在定义时赋初值,也可以重新赋值让其指向其他对象。

引用必须在创建时被初始化。指针可以在任何时间被初始化。

大部分情况下,指针的类型都要和它所指向的对象严格匹配。

指针的值应属于下列4种状态之一:

指向一个对象;

指向紧邻对象所占的下一个位置;

空指针;

无效指针,除上述以外的其他值。

解引用符*

如果指针指向了一个对象,允许使用*来访问该对象。

*(解引用符)仅适用于那些确实指向了某个对象的有效指针。

空指针

得到空指针最直接的办法就是用字面值nullptr来初始化指针。

建议:初始化所有指针。

int *pi=0;    //pi合法,是一个空指针

void* 指针

void*是一种特殊的指针类型,可用于存放任意对象的地址。

double obj = 3.14, *pd = &obj;

void *pv = &obj;     //obj可以是任意类型的对象

指向指针的指针

int ival = 1024;

int *pi = &ival;

int **ppi = π     //ppi指向一个指向int型的指针的指针

指向指针的引用

int i=42;

int *p;

int *&r = p;      //r是一个对指针p的引用;

r=&i;

*r=0;

面对一条比较复杂的指针或引用的声明语句时,从右到左阅读有助于弄清楚它的真实含义

猜你喜欢

转载自www.cnblogs.com/Summer-8918/p/10241917.html