C++中 指针的指针是什么?指针的引用又是什么?你可能需要看看这篇文章

关于变量的定义

我们都知道变量的定义包括一个基本数据类型(base type)和一组声明符,在同一条定义语句中,输入基本数据类型不同,但是声明符的形式却可以不同。

//如:i是一个int的整数,a是一个int型的指针,b是一个int型的引用
int i = 0 , *a = i , &b = i;

我们不需要太在意基本数据类型和类型修饰符的关系,后者只不过是前者声明符的一部分罢了。

定义多个变量

有很多人认为类型修饰符(如&和*)在定义中会作用于全部的函数,就是一次定义,一句中所有的变量使用(不得不说这样真方便,但是编译器不允许我们这样做)

//如这样 , 很正常的一次声明
int *p;

但是像下面这样一次声明两个却是错误的

int * p1 , p2

应该是这样才对

int *p1 , *p2;

指向指针的指针

按照逻辑来说,C++中并没有限制声明符中修饰符的个数,我们只需要按照其逻辑去加以解读即可。像指针,指针是内存中的对象,当然也可以像其他对象一样对它将它的地址再放到另一个指针当中。

int *p;	//指针
int **p;	//指向指针的指针
int ***p;	//指向指针的指针的指针

它们的关系图如下:
请添加图片描述
一般int指针解引用时,会得到一个int的数。解引用指针的指针时也是一样,会得到一个指针。

指向指针的引用

引用(可以理解为一个变量的副本)本身不是一个对象,所以不存在指向引用的指针;但是指针是一个对象,所以它存在指向指针的引用。

int i = 10;
int *p;		//p是一个int型的指针
int *&b = p;	//b是一个指针的引用,它是对p的引用

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

1、p是一个int型的指针
2、b是一个指针的引用,它是对p的一个引用
3、b引用了一个指针,因此给b赋值&i就是令p指向i
4、解引用b得到i ,也就是p指向的对象,将i的值改为0

如何解读r呢?

直观的方法就是从左向右阅读,因为离变量名最近的修饰符对变量的类型有直接的影响。所以b是一个引用,但是却是一个指针的引用

猜你喜欢

转载自blog.csdn.net/weixin_60154963/article/details/124282339