复合类型——引用和指针
Posted summer-8918
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复合类型——引用和指针相关的知识,希望对你有一定的参考价值。
复合类型是指基于其他类型定义的类型。介绍两种复合类型:引用和指针。
C++11中新增了一种引用,“右值引用”——主要是基于内置类。使用术语“引用”时是指“左值引用”。
引用&
为对象起了另外一个名字,引用类型引用另一种类型。引用必须被初始化。一般在初始化变量时,初始值会被拷贝到新建的对象中。然而定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。
int ival = 1024;
int &refval=ival; //refval指向ival(是ival的另一个名字)
void*是一种特殊类型的指针,可用于存放任意对象的地址。
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。引用智能绑定在对象上,不能与某个字面值或某个表达式的计算结果绑定在一起。
指针
指针是指向另一种类型的复合变量。与引用类似,指针也实现了对其他对象的间接访问。指针与引用的不同:指针本身就是一个对象,允许对指针赋值和拷贝,而且指针的声明周期内它可以先后指向几个不同的对象;指针无需在定义是赋初值。
获取对象的地址
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;
面对一条比较复杂的指针或引用的声明语句时,从右到左阅读有助于弄清楚它的真实含义
以上是关于复合类型——引用和指针的主要内容,如果未能解决你的问题,请参考以下文章