引用和指针

一、引用

引用(reference)为对象起另外一个名字,引用类型另外一种类型,将声明符写成&d的形式来定义引用,d是声明的变量名。引用必须被初始化。

例如:int ival = 1024;

            int &refVal = ival;//refVal指向ival,是ival的另一个名字。

注意:引用并非对象,只是为一个已经存在的对象所起的另外一个名字。给引用赋值,实际上是值赋给了与之绑定的对象。由于引用本身不是一个对象,所以不能定义引用的引用。引用只能绑定在对象上,不能与字面值或某个表达式的计算结果绑定在一起。引用类型要与引用对象的类型一致。

二、指针

指针是一种指向另外一种类型的复合类型,指针类型被用于指定它所指向的类型,两者类型必须一致。

指针的值(即地址)应属于下列四种状态之一:

1、指向一个对象

2、指向紧邻对象所占空间的下一个位置

3、空指针,指针没有指向如何对象

4、无效指针,即上述情况之外的其他值

空指针:不指向任何对象。生成空指针方法如下:

1 int *p1 = nullptr;//等价于int *p1=0
2 int *p2=0;//直接将p2初始化为字面值常量0
3 //需要#include <cstdlib.h>
4 int *p3 = NULL;//等价于int *p3 = 0;

初始化所有的指针。

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

三、指针和引用的主要区别

1. 引用总是指向某个确定的对象,定义引用时没有进行初始化会出现编译错误;

2. 赋值行为上存在差异:给引用赋值修改的是该引用所关联的对象的值,引用一经初始化,就始终指向同一个特定对象。给指针赋值修改的是指针对象本身,也就是使指针指向另一个对象,指针在不同时刻可指向不同的对象。

四、指向指针的指针

指针是内存的对象,允许把指针的地址存放在另一个指针当中

五、指向指针的引用

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

格式:int *&r=p;//p为int *p;

 

posted @ 2021-01-30 13:46  嗨_放飞梦想  阅读(328)  评论(0编辑  收藏  举报