问题:如何理解指向指针的指针?

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

引用文章相关段落如下:

C
1
2

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

现在我们可以这么写:

C
1
int **ipp = &ip1;

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

如果我们接着这么写:

C
1
*ipp = ip2;

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

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

最佳答案:

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

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

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

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

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

C语言:指向指针的指针相关推荐

  1. C语言 指向函数的指针

    C语言程序在编译后,每个函数都有一个首地址(也就是函数第一条指令的地址),这个地址称为函数的指针.可以定义指向函数的指针变量,使用指针变量间接调用函数. 先用一个简单的程序来说明: #include ...

  2. c语言指向常量的指针和常量指针

    指向常量的指针:该指针指向的值不能改变,指针不是常量,所以可以修改指针的指向  int main(void){    int value = 10;    /*定义一个指向常量的指针*/    con ...

  3. 动态二维数组外圈元素值的和_C语言 | 用指向元素的指针变量输出二维数组元素的值...

    例33:有一个3*4的二维数组,要求用C语言实现指向元素的指针变量输出二维数组个元素的值. 解题思路:二维数组的元素时整型的,它相当于整型变量,可以用int*型指针变量指向它.二维数组的元素在内存中是 ...

  4. c语言中的字节和元素,C语言指向数组元素的指针

    指向数组元素的指针和运算法则 所谓指向数组元素的指针,其本质还是变量的指针.因为数组中的每个元素,其实都可以直接看成是一个变量,所以指向数组元素的指针,也就是变量的指针. 指向数组元素的指针不难,但很 ...

  5. C语言 | 指向指针的指针排序

    C语言实现用指向指针的指针的方法对5个字符串排序并输出. 解题思路:读者看着道题的时候,首先要知道什么时指针,指向指针的指针应该怎么用,一般在开发中不这样用,读者要看明白,这个很锻炼思维的. C语言源 ...

  6. 指向函数的指针 - C语言

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/1368947400.html 基本概念 ...

  7. c语言位向量机伞_一文读懂C语言精华-指针变量和指向指针的指针

    1978年贝尔实验室正式发表C语言,受到众多IT从业者的热捧,即使41年过去了,C语言仍然牢牢占据最受欢迎编程语言前二的位置,许多人的程序开发之路也是从C语言开始的. 编程语言受欢迎排名 C语言简洁紧 ...

  8. c语言指针变量的定义数组的长度,【C语言更新】指向数组的指针

    文/Edward 前面我们在讲述数组的时候曾经说过,对于数组内部元素的引用方式主要有两种,一种就是使用方括号"[]"的下标索引,另一种就是之前提到过,但是没有细致讲述的指针引用. ...

  9. C语言学习笔记---指向函数的指针

      在内存中函数的存放也是一段连续的内存,函数名就是指向改内存中的首地址,所以也可以将这个函数的首地址赋给一个指针变量,这样通过指针变量就可以访问改函数.   那么为什么要通过指针来访问函数呢?下面通 ...

  10. c语言handler指针,typedef与指向函数的指针结合的妙用

    今天看到keil的一个例子,里面涉及到利用typedef和指向函数的指针结合的例子,使得程序结构体系非常明了,觉得很好,特地记下来. 首先在头文件定义了这个指针,并用typedef将其声明为一个类型: ...

最新文章

  1. csvtk:命令行下表格统计分析、数据筛选、替换、整理神器
  2. c# 注册表操作,创建,删除,修改,判断节点是否存在
  3. php定时任务(自己)
  4. sqlserver如何从周一计算周_纯零基础,花10周时间,完全搞定Python,有没有可能?...
  5. 在spring中使用JdbcTemplate进行数据库管理操作
  6. 基于JAVA+SpringBoot+Mybatis+MYSQL的疫苗接种信息管理系统
  7. 《作业指导书》的发布管理问题与解决办法
  8. [洛谷1533] 可怜的狗狗
  9. 路由器的架构集指令集
  10. The projiect you are opening contains compilation errors
  11. 孢子社群:今日推荐人工智能微信群:粤、沪、鄂人工智能产业化集群1
  12. 怎么将多张图片拼在一起?分享几种好用的拼图工具
  13. (3)网页视频获取下载案例3
  14. c语言编程期刊论文管理系统,C语言编程下计算机软件论文
  15. 无穷小陪伴老翁走人生
  16. 物联卡中心:物联卡能永久使用吗?放手机会不会被封卡
  17. A* 流程+代码详细注释
  18. 华为 HCIA-Cloud Computing V4.0(基础知识)
  19. linux多线程编程--学习笔迹4
  20. JVM总结(四)GC收集器以及JDK7,JDK8中JVM内存变化

热门文章

  1. Linux系统下安装Mysql
  2. ArcGIS API for Silverlight之配准JPG图片地图文字倾斜解决方案
  3. 模仿Google搜索功能
  4. 一天一个小技巧(5)——CSDN编译器的图片位置、大小调节
  5. (宏)Word修改段落行距为固定值24磅
  6. 第三节: 串口通信(用CubeMX学习STM32)
  7. [AT2306]Rearranging(拓扑序)
  8. Knowing is not enough; we must apply. Willing is not enough; we must do.
  9. GeoQuiz初体验
  10. cve-2017-0199metasploit复现过程