我在一篇教程中看到下面这段,它描述指向指针的指针是如何运作的。

引用文章相关段落如下:

  1. int i = 5, j = 6, k = 7;
  2. int *ip1 = &i, *ip2 = &j;

现在我们可以这么写:

int **ipp = &ip1;

那么现在指针 ipp 指向了 ip1,ip1 指向了 i。*ipp 就是 ip1,**ipp 就是 i,或者说是 5。我们可以用我们熟悉的盒子箭头图来描述,像这样:

如果我们接着这么写:

*ipp = ip2;

我们就改变了 ipp 指向的那个指针(也就是 ip1),现在它指向 ip2 所指的地方。也就是说(ip1)现在它指向了 j:

我的疑问是:为什么在第二幅图里,ipp 还是指向 ip1 而不是 ip2?

最佳答案:

让我们暂时忘掉那些关于指针的各种类比。指针实际上存放的是内存的地址。

& 符号的意思是取地址,也就是返回一个对象在内存中的地址。

* 符号的意思是取得一个指针所指向的对象。 也就是如果一个指针保存着一个内存地址,那么它就返回在那个地址的对象。

所以当你这么写时 *ipp = ip2,实际上是把 ipp 存的地址所对应的对象,也就是 ip1 取到,然后把 ip2 存的值赋值给 ip1,也就是 j 的地址。

简单点就是:
&:取址。
* :取值。

C/C++指向指针的指针相关推荐

  1. Go 学习笔记(13)— 指针定义、指针特点、空指针、指针数组、指向指针的指针、指针作为函数入参

    1. 复合数据类型 Go 语言基本的复合数据类型有指针.数组.切片.字典.通道.结构和接口等.格式如下: * pointerType // 指针类型, [n]elementType // 数组类型, ...

  2. C指针8:二级指针(意思就是指向指针的指针)

    指针可以指向一份普通类型的数据,例如 int.double.char 等,以下简称一级指针: 也可以指向一份指针类型的数据,例如 int *.double *.char * 等.以下简称二级指针:即如 ...

  3. C指针4:数组指针(指向数组的指针)

    先明确两个概念:(1和2是两个完全不一样的东西) 1.数组指针:如果一个指针指向了数组(该数组就是普通定义的数组),我们就称它为数组指针(Array Pointer).(1强调的是指针) 2.指针数组 ...

  4. 常引用、常量指针、指针常量、指向常量的常指针、空指针与野指针解释

    1.一.基础知识 引用并非对象 引用必须初始化 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起 类型要严格匹配 int &a = 10; //错误:引用类型的初始值必须是 ...

  5. 【 C 】指向数组的指针(数组指针)(行指针)

    本博文内容参考:<C 和 指针> 本博文解决两个问题,一是如何访问二维数组的行,以及元素:二是如何定义指向数组的指针以及如何赋值等. 很简单,快速记录! 先给出一个案例,判断下面这两个声明 ...

  6. 常量指针与指向常量的指针

    这两个概念经常很容易混淆,下面简单分析一下 1.常量指针: int * const p   : const p 就是一个常量,然后再看*,可以看出是一个常量类型的指针,即int类型的常量指针.不能修改 ...

  7. [C++] 指向常量的指针 VS 指针类型的常量

    指向常量的指针 VS 指针类型的常量 const 修饰指针时的位置不同,作用也不相同. 1. 指向常量的指针 不能通过指向常量的指针改变所指对象的值,但指针本身可以改变,可以指向另外的对象. 例: i ...

  8. C++基础之指向成员的指针

    C++中指向成员的指针 一个类有两种基本的成员:函数成员和数据成员.同样的,指向成员的指针也有两种:指向函数成员的指针和指向数据成员的指针.后则其实并不常用,因为类一般是不含有公共数据成员的,仅当用在 ...

  9. 20返回指针的函数与指向函数的指针

    一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回指针的函数的一般形式为:类型名 * 函数名(参数列表) 比如下面这个函数,返回一个指向char类型变 ...

最新文章

  1. Oracle 10g R2 RAC手动打补丁PSU(10.2.0.5.19)
  2. 《Linux内核设计与实现》读书笔记(8)--- 内核同步方法(2)
  3. 成功解决WARNING: You do not appear to have an NVIDIA GPU supported by the 430.34 NVIDIA Linux graph
  4. python编程思维导图_用来梳理 Python 编程核心知识15张思维导图
  5. java.lang.RuntimeException: can not run elasticsearch as root
  6. (JAVA)Arrays数组工具类
  7. Leetcode--826. 安排工作以达到最大收益
  8. mysql中没有nvl求和sum_mysql使用sum()出现null的问题,各种总结
  9. 辨异 —— Java 中 String 的相等性比较
  10. IT项目角色标准定义
  11. 一道不知道哪里来的容斥题
  12. 使用httpclient下载 页面、图片
  13. Python sklearn 实现过采样和欠采样
  14. 天正菜单栏不见了怎么显示出来_天正建筑菜单栏不见了怎么调出来? _ 设计学院_设计软件教程自学网...
  15. Python读写xlsx文件
  16. Caused by: java.lang.IllegalStateException: No ServletContext set
  17. 成人c语言培训,C语言程序设计在成人教育中教学.doc
  18. 【黑客故事】程序员作家王小波
  19. Mac安装sshpass
  20. 寒假思雨姐摸底E题,题解

热门文章

  1. iptables命令(备忘)
  2. aes前台加密后台解密
  3. Vue(十)生命周期
  4. centos7+ansible自动化工具使用
  5. Go 学习笔记(47)— Go 标准库之 strconv(string/int 互相转换、Parse 字符串转换为指定类型、Format 指定类型格式化为字符串)
  6. css样式之边框和内外边距
  7. datatable和dataset的区别
  8. C语言程序设计 细节总结(链表)
  9. 网页如何与mysql服务器建立连接不上,html与mysql建立连接数据库
  10. 老齐学python的django 源代码_《跟老齐学Python:Django实战》真正的手把手“带”您学习...