展示一下使用指针的指针和指针的引用修改传递给方法的指针,以便更好的使用它。(这里说的指针的指针不是一个二维数组)

为什么需要使用它们

当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方法,也可以说传递指针是指针的值传递。

如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改的指针的copy而不是指针本身,原来的指针还保留着原来

的值。我们用下边的代码说明一下问题:

int m_value = 1;void func(int *p)
{p = &m_value;
}int main(int argc, char *argv[])
{int n = 2;int *pn = &n;cout << *pn << endl;func(pn);cout << *pn <<endl;return 0;
}

看一下输出结果

输出的是两个2

使用指针的指针

展示一下使用指针的指针做为参数

void func(int **p)
{*p = &m_value;// 也可以根据你的需求分配内存*p = new int;**p = 5;
}int main(int argc, char *argv[])
{int n = 2;int *pn = &n;cout << *pn << endl;func(&pn);cout << *pn <<endl;return 0;
}

我们看一下 func(int **p)这个方法

  • p:  是一个指针的指针,在这里我们不会去对它做修改,否则会丢失这个指针指向的指针地址
  • *p:  是被指向的指针,是一个地址。如果我们修改它,修改的是被指向的指针的内容。换句话说,我们修改的是main()方法里 *pn指针
  • **p: 两次解引用是指向main()方法里*pn的内容

指针的引用

再看一下指针的引用代码

int m_value = 1;void func(int *&p)
{p = &m_value;// 也可以根据你的需求分配内存p = new int;*p = 5;
}int main(int argc, char *argv[])
{int n = 2;int *pn = &n;cout << *pn << endl;func(pn);cout << *pn <<endl;return 0;
}

看一下func(int *&p)方法

  • p:  是指针的引用,main()方法里的 *pn
  • *p:是main()方法里的pn指向的内容。

本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/p/4116349.html,如需转载请自行联系原作者

详解c++指针的指针和指针的引用相关推荐

  1. c语言char数组和short数组的区别,详解C语言中Char型指针数组与字符数组的区别

    详解C语言中Char型指针数组与字符数组的区别 详解C语言中Char型指针数组与字符数组的区别 1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { ...

  2. jq的插件 vue中引用_详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件

    本篇文章主要介绍了详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件,具有一定的参考价值,有兴趣的可以了解一下 使用vue-cli构建的vue项目,webpack的配置文 ...

  3. c++ 智能指针_详解 C++ 11 中的智能指针

    C/C++ 语言最为人所诟病的特性之一就是存在内存泄露问题,因此后来的大多数语言都提供了内置内存分配与释放功能,有的甚至干脆对语言的使用者屏蔽了内存指针这一概念.这里不置贬褒,手动分配内存与手动释放内 ...

  4. 指针类型作用详解(一):不同指针类型的访问范围不同

    文章目录 前言 一.指针类型的作用 二.int型指针类型与char型指针类型 int型指针类型 2.char型指针类型 总结 前言 指针指向的是一个变量存储的地址,那么在c语言中,不同类型的指针有什么 ...

  5. 详解C语言中的数组指针与指针数组

    ·详解数组指针与指针数组 ·数组指针 一.区分 首先我们需要了解什么是数组指针以及什么是指针数组,如下图: int *p[5]; int (*p)[5]; 数组指针的意思即为通过指针引用数组,p先和* ...

  6. 详解:C语言中的指针和p, p+1, *(p+1), *P+1, p[0], p[0] 的含义

    解析:C语言中的指针和p, p+1, *(p+1), *P+1, p[0], &p[0] 每一种表达式的含义  一.先解决一个问题:什么是指针 指针就是存放地址的变量.很好,百度上就是这个答案 ...

  7. c语言指针常量和常量指针,详解C语言中的常量指针和指针常量

    概述对于新手来说,指针在c语言里总是一个非常难以理解的概念.在这篇文章中,我们将解释常量指针,指针常量,const pointer to const(ps:楼主以为这可以翻译成指向常量的常量指针)的区 ...

  8. php反向引用,JavaScript 正则应用详解【模式、欲查、反向引用等】

    本文实例讲述了JavaScript 正则应用.分享给大家供大家参考,具体如下: 正则应用 正则表达式在web开发中的常用 邮箱验证 用户名验证 替换字符串某一部分 信息采集,用来分析有效代码段 ... ...

  9. MarkDown语法详解:标题、字体、列表、引用、图片、表格、代码、超链接、公式

    文章目录 什么是Markdown? 学习准备 常用语法 标题(二级标题): 三级标题 四级标题 字体 显示效果: 文字设置 分割线 列表 有序列表 无序列表 列表嵌套 引用 单句引用 区块引用嵌套 区 ...

  10. 开源PLM软件Aras详解七 在Aras的Method中如何引用外部DLL

    在实际的项目中,Aras内部的方法可能并不能完全满足我们,比如Office的组件,就必须引入,那么在Aras内部的Method中,我们如何引入外部Dll文件 首先,我们新建一个Dll文件,简单的Dem ...

最新文章

  1. windows server 2012 用sysdba登录报错 ORA-01031
  2. swagger的php配置,thinkphp6+swagger-php配置管理接口文档
  3. python语言用什么来表明每行代码的层次关系_《计算机二级Python语言程序设计考试》第2章: Python语言基本语法元素...
  4. python拥有庞大的计算生态_Python稳定基础训练中的易出错概念问题1(包括答案和分析),稳基,修炼,之,计算机,等级,考试,易错,含答案,与,解析...
  5. 电脑硬盘右击计算机就卡死,Win10电脑使用过程中莫名其妙卡死的的三种解决方法...
  6. Java并发编程(十七)Java并发包中原子操作类原理
  7. 专业学习与职业发展之我见
  8. RNA 14. SCI 文章中差异表达基因之 蛋白互作网络 (PPI)
  9. android 4.4 投屏,安卓投屏助手官方
  10. 互联网思维和项目管理
  11. 使用vue扫描扫描仪图像
  12. 爬取百思不得姐段子图片
  13. DIMM DDR 区别和联系
  14. mysql数据库导出数据乱码问题_Mysql数据库导出来的是乱码如何解决
  15. 2016搜狗校招编程题
  16. 计算机理论和地理的关系,计算机辅助地理教学的理论和实践
  17. 显示器分辨率一直跳_电脑屏幕的分辨率老是变换怎么回事?
  18. [转帖]全球软件市场格局变化
  19. python信用卡违约预测分析_Python作业集:信用卡还款违约预测
  20. Linux同时开启tcp_tw_recycle和tcp_timestamps导致TCP syn有时不响应故障排查

热门文章

  1. CentOS7-Docker 配置国内镜像源
  2. 纯CSS: hover特效
  3. CSDN怎么换行?添加空行
  4. 配置SpringMVC框架
  5. 基于QEMU的ARM Cortex-A9开发板Vexpress-ca9的Linux内核的编译和运行
  6. 计算机网络课设不会,计算机网络课设讲述.doc
  7. 实战:轻量级分布式文件系统FastDFS(GraphicsMagick图片压缩)
  8. ElasticSearch经典面试题
  9. time和datatime模块
  10. Jquery自定义分页插件