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是一个引用,但是却是一个指针的引用
C++中 指针的指针是什么?指针的引用又是什么?你可能需要看看这篇文章的更多相关文章
- java8中parallelStream提升数倍查询效率是怎样实现的,来看看这篇文章
作者:我恰芙蓉王 原文:https://www.cnblogs.com/-tang/p/13283216.html 业务场景 在很多项目中,都有类似数据汇总的业务场景,查询今日注册会员数,在线会员数, ...
- C++ 中判断非空的错误指针
最近在写网络上的东西,程序经过长时间的运行,会出现崩溃的问题,经过DUMP文件的查看,发现在recv的地方接收返回值的时候,数据的长度异常的大差不多16亿多字节.而查看分配后的char指针显示为错误的 ...
- Analyze 静态分析工具中显示 大量的CF类型指针 内存leak 问题, Core Foundation 类型指针内存泄漏
Analyze 静态分析工具中显示 大量的CF类型指针 内存leak 问题 今天使用Analyze 看了下项目, 解决办法,项目中使用了ARC,OC的指针类型我们完全不考虑release的问题 ...
- VC中窗口ID,句柄,指针三者相互转换函数【转】
ID--HANDLE--HWND三者之间的互相转换id->句柄 hWnd = ::GetDlgItem(hParentWnd,id);id->指针 CWnd:: ...
- c++中多态性、dynamic_cast、父类指针、父类对象、子类指针、子类对象
c++多态性是依靠虚函数和父类指针指向子类对象来实现的.简单来说,父类中定义虚函数,父类指针指向子类对象,父类指针调用函数时调用的就是子类的函数. 父类没有定义虚函数,父类指针指向子类对象时,父类指针 ...
- C语言中的函数、数组与指针
1.函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念: 函 ...
- Qt中的Q_D宏和d指针
_ZTS7QObject 一.Q_D的在文件中的提法 Q_D的设置意在方便地获取私有类指针,文件为qglobal.h.下面的##是宏定义的连字符.假设类名是A,那么A##Private翻译过来就是AP ...
- 转载:C++中两个类中互相包含对方对象的指针问题
原文链接:http://www.cnblogs.com/hanxi/archive/2012/07/25/2608068.html 前几天很不爽,因为C++中两个类中互相包含对方对象的指针编译时提示某 ...
- 浅谈 .NET 中的对象引用、非托管指针和托管指针 理解C#中的闭包
浅谈 .NET 中的对象引用.非托管指针和托管指针 目录 前言 一.对象引用 二.值传递和引用传递 三.初识托管指针和非托管指针 四.非托管指针 1.非托管指针不能指向对象引用 2.类成员指针 五 ...
随机推荐
- SpringMVC实现文件上传功能
文件上传 文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data" SpringMVC中将上传的文件封装到Multi ...
- 从零开始,开发一个 Web Office 套件(14):复制、粘贴、剪切、全选
这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...
- SpringBean的生命周期 以及一些问题总结
SpringBean的生命周期 一.传统 Bean 的生命周期 new实例化: 可使用了 无引用时,GC回收. 二.Servlet 的生命周期 实例化Servlet对象: init初始化对象: 相应客 ...
- Schema和数据类型优化?
整数TinyInt,SmallInt,MediumInt,Int,BigInt 使用的存储8,16,24,32,64位存储空间.使用Unsigned表示不允许负数,可以使正数的上线提高一倍.实数 Fl ...
- eureka自我保护机制是什么?
当Eureka Server 节点在短时间内丢失了过多实例的连接时(比如网络故障或频繁启动关闭客户端)节点会进入自我保护模式,保护注册信息,不再删除注册数据,故障恢复时,自动退出自我保护模式.
- 什么是 Hystrix 断路器?我们需要它吗?
由于某些原因,employee-consumer 公开服务会引发异常.在这种情况下使用Hystrix 我们定义了一个回退方法.如果在公开服务中发生异常,则回退方法返回一些默认值. 如果 firstPag ...
- switch 是否能作用在 byte 上,是否能作用在 long 上, 是否能作用在 String 上?
在 Java 5 以前,switch(expr)中,expr 只能是 byte.short.char.int.从 Java 5 开始,Java 中引入了枚举类型,expr 也可以是 enum 类型,从 ...
- 什么是通知(Advice)?
特定 JoinPoint 处的 Aspect 所采取的动作称为 Advice.Spring AOP 使用一 个 Advice 作为拦截器,在 JoinPoint "周围"维护一系列 ...
- 详解 IOC
什么是IOC: IOC-Inversion Of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是 ...
- c源文件中为什么要包含自己对应的头文件
另一篇:.c文件和.h文件的关系 引言: 我们经常在c工程中发现,源文件中要包含自己的头文件.一直以来,都不知道为什么这样做.现在,我知道了. 以前的认知: 我认为,.c文件没有必要包含自己的.h文件 ...