主页 > 软件开发  > 

C语言多级指针详解-通过实例理解一级、二级、三级指针

C语言多级指针详解-通过实例理解一级、二级、三级指针
C语言多级指针详解 - 通过实例理解一级、二级、三级指针

文章目录 C语言多级指针详解 - 通过实例理解一级、二级、三级指针引言一、示例代码二、指针基础回顾(先备知识)1.生活中的类比2.指针变量定义3.关键操作符4.解引用本质 三、多级指针的本质1.层级关系解析2.递进式理解 四、代码逐行解析1.变量定义阶段2. 建立指向关系 五、解引用过程详解1. 三级指针修改值的过程2. 各层级访问对比 读者思考


引言

指针是C语言中的重要概念,而多级指针(指向指针的指针)往往让初学者感到困惑。本文将通过一个完整的示例程序,帮助大家理解多级指针的工作原理。这对后面数据结构的学习很有用!


一、示例代码 #include <stdio.h> int main() { int a = 6; // 定义整型变量 a,并初始化为 6 int *p, **q, ***r; // 定义整型指针变量 p,二级指针变量 q,三级指针变量 r p = &a; // 将 p 指向 a 的地址 q = &p; // 将 q 指向 p 的地址 r = &q; // 将 r 指向 q 的地址 printf("%d\n", p); // 输出 p 的值,即 a 的地址 printf("%d\n", &p); // 输出 p 的地址 printf("%d\n", *p); // 输出 p 指向的值,即 a 的值 printf("%d\n", *q); // 输出 q 指向的值,即 p 的值,即 a 的地址 printf("%d\n", **q); // 输出 q 指向的指针的值,即 p 指向的值,即 a 的值 printf("%d\n", r); // 输出 r 的值,即 q 的地址 printf("%d\n", *r); // 输出 r 指向的指针的值,即 q 的值,即 p 的地址 printf("%d\n", **r); // 输出 r 指向的指针的指针的值,即 q 指向的指针的值,即 p 指向的值,即 a 的地址 printf("%d\n", ***r);// 输出 r 指向的指针的指针的指针的值,即 q 指向的指针的指针的值,即 p 指向的指针的值,即 a 的值 ***r = 10; // 将 p 指向的值,即 a 的值,修改为 10 printf("%d\n", *p); // 输出 p 指向的值,即 a 的值 printf("%d\n", a); // 输出 a 的值 return 0; }

运行结果: 6422036 6422024 6 6422036 6 6422016 6422024 6422036 6 10 10 下面开始解释

二、指针基础回顾(先备知识) 1.生活中的类比

把内存比作快递柜,每个柜子都有编号(地址) 变量是柜子里的物品,指针是记录柜子号的纸条 示例:int a = 42; 就像在200号柜子放了一个数字42

2.指针变量定义 int *p; // 声明一个"整型快递柜号记录纸条" 3.关键操作符

& 取地址符:获取柜子号(p = &a) *解引用符:根据纸条找柜子里的物品(*p)

4.解引用本质

解引用的本质解释:

解引用就是通过指针访问它所指向的内存地址中存储的值使用 * 运算符来进行解引用操作可以用解引用来读取或修改指向的变量的值 三、多级指针的本质 1.层级关系解析

2.递进式理解 int a = 6; // 原始数据 int *p = &a; // p保存a的地址(一级) int **q = &p; // q保存p的地址(二级) int ***r = &q; // r保存q的地址(三级)

四、代码逐行解析 1.变量定义阶段 int a = 6; int *p, **q, ***r; p:能存储普通整型变量地址q:需要存储指针变量的地址r:需要存储二级指针的地址 2. 建立指向关系 p = &a; // p → a q = &p; // q → p r = &q; // r → q

五、解引用过程详解 1. 三级指针修改值的过程 ***r = 10;

分步解析:

r 存储的是q的地址*r 得到q的内容(即p的地址)**r 得到p的内容(即a的地址)***r 最终操作a的内存空间 2. 各层级访问对比

这里就像《洋葱》 就像原本的值是6被修改后是10 初始值:6 → “我就像一颗洋葱 永远是配角戏” 修改后:10 → “你会发现 你会讶异 你是我最压抑 最深处的秘密”


读者思考

如果声明四级指针int ****s,应该如何初始化? 为什么说printf(“%d”, &a)和printf(“%d”, p)的输出可能相同? 尝试画出四级指针的内存指向关系图

标签:

C语言多级指针详解-通过实例理解一级、二级、三级指针由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C语言多级指针详解-通过实例理解一级、二级、三级指针