关于变量的定义

我们都知道变量的定义包括一个基本数据类型(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++中 指针的指针是什么?指针的引用又是什么?你可能需要看看这篇文章的更多相关文章

  1. java8中parallelStream提升数倍查询效率是怎样实现的,来看看这篇文章

    作者:我恰芙蓉王 原文:https://www.cnblogs.com/-tang/p/13283216.html 业务场景 在很多项目中,都有类似数据汇总的业务场景,查询今日注册会员数,在线会员数, ...

  2. C++ 中判断非空的错误指针

    最近在写网络上的东西,程序经过长时间的运行,会出现崩溃的问题,经过DUMP文件的查看,发现在recv的地方接收返回值的时候,数据的长度异常的大差不多16亿多字节.而查看分配后的char指针显示为错误的 ...

  3. Analyze 静态分析工具中显示 大量的CF类型指针 内存leak 问题, Core Foundation 类型指针内存泄漏

    Analyze 静态分析工具中显示 大量的CF类型指针 内存leak 问题   今天使用Analyze 看了下项目,   解决办法,项目中使用了ARC,OC的指针类型我们完全不考虑release的问题 ...

  4. VC中窗口ID,句柄,指针三者相互转换函数【转】

    ID--HANDLE--HWND三者之间的互相转换id->句柄        hWnd = ::GetDlgItem(hParentWnd,id);id->指针        CWnd:: ...

  5. c++中多态性、dynamic_cast、父类指针、父类对象、子类指针、子类对象

    c++多态性是依靠虚函数和父类指针指向子类对象来实现的.简单来说,父类中定义虚函数,父类指针指向子类对象,父类指针调用函数时调用的就是子类的函数. 父类没有定义虚函数,父类指针指向子类对象时,父类指针 ...

  6. C语言中的函数、数组与指针

    1.函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念:  函 ...

  7. Qt中的Q_D宏和d指针

    _ZTS7QObject 一.Q_D的在文件中的提法 Q_D的设置意在方便地获取私有类指针,文件为qglobal.h.下面的##是宏定义的连字符.假设类名是A,那么A##Private翻译过来就是AP ...

  8. 转载:C++中两个类中互相包含对方对象的指针问题

    原文链接:http://www.cnblogs.com/hanxi/archive/2012/07/25/2608068.html 前几天很不爽,因为C++中两个类中互相包含对方对象的指针编译时提示某 ...

  9. 浅谈 .NET 中的对象引用、非托管指针和托管指针 理解C#中的闭包

    浅谈 .NET 中的对象引用.非托管指针和托管指针   目录 前言 一.对象引用 二.值传递和引用传递 三.初识托管指针和非托管指针 四.非托管指针 1.非托管指针不能指向对象引用 2.类成员指针 五 ...

随机推荐

  1. 基于long pull实现简易的消息系统参考

    我们都用过消息中间件,它的作用自不必多说.但对于消费者却一直有一些权衡,就是使用push,还是pull模式的问题,这当然是各有优劣.当然,这并不是本文想讨论的问题.我们想在不使用长连接的情意下,如何实 ...

  2. ctf之GET

    题目信息如图 启动环境 根据信息只需将参数?what=flag添加到url上即可

  3. C#: .net序列化及反序列化 [XmlElement(“节点名称”)] [XmlAttribute(“节点属性”)] (下篇)

    介绍 XML 序列化 .NET Framework 开发员指南   序列化是将对象转换为容易传输的格式的过程.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间 ...

  4. 羽夏看Win系统内核——消息机制篇

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  5. vector存放边的方法

    #include<bits/stdc++.h> using namespace std; struct Edge{ int x; int y; }; vector <Edge> ...

  6. 文档类型声明<!DOCTYPE html>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  7. SpringBoot中的日志使用:

    SpringBoot中的日志使用(一) 一:日志简介: 常用的日志接口 commons-logging/slf4j 日志框架:log4j/logback/log4j2 日志接口屏蔽了日志框架的底层实现 ...

  8. synchronized 关键字的用法?

    synchronized 关键字可以将对象或者方法标记为同步,以实现对对象和方法的互 斥访问,可以用 synchronized(对象) { - }定义同步代码块,或者在声明方法时 将 synchron ...

  9. 解释 AOP 模块?

    AOP 模块用于发给我们的 Spring 应用做面向切面的开发, 很多支持由 AOP 联 盟提供,这样就确保了 Spring 和其他 AOP 框架的共通性.这个模块将元数据编 程引入 Spring.

  10. Java 中如何格式化一个日期?如格式化为 ddMMyyyy 的形式?

    Java 中,可以使用 SimpleDateFormat 类或者 joda-time 库来格式日期. DateFormat 类允许你使用多种流行的格式来格式化日期.参见答案中的示例代 码,代码中演示了 ...