C语言 二级指针详解及示例代码
来源:互联网 发布:yellow submarine 知乎 编辑:程序博客网 时间:2024/05/23 01:59
指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。
如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。
假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示:
将这种关系转换为C语言代码:
指针变量也是一种变量,也会占用存储空间,也可以使用&获取它的地址。C语言不限制指针的级数,每增加一级指针,在定义指针变量时就得增加一个星号*。p1 是一级指针,指向普通类型的数据,定义时有一个*;p2 是二级指针,指向一级指针 p1,定义时有两个*。
如果我们希望再定义一个三级指针 p3,让它指向 p2,那么可以这样写:
int ***p3 = &p2;
四级指针也是类似的道理:
int ****p4 = &p3;
实际开发中会经常使用一级指针和二级指针,几乎用不到高级指针。
想要获取指针指向的数据时,一级指针加一个*,二级指针加两个*,三级指针加三个*,以此类推,请看代码:
运行结果:
100, 100, 100, 100
&p2 = 0X28FF3C, p3 = 0X28FF3C
&p1 = 0X28FF40, p2 = 0X28FF40, *p3 = 0X28FF40
&a = 0X28FF44, p1 = 0X28FF44, *p2 = 0X28FF44, **p3 = 0X28FF44
以三级指针 p3 为例来分析上面的代码。***p3等价于*(*(*p3))。*p3 得到的是 p2 的值,也即 p1 的地址;*(*p3) 得到的是 p1 的值,也即 a 的地址;经过三次“取值”操作后,*(*(p3)) 得到的才是 a 的值。
假设 a、p1、p2、p3 的地址分别是 0X00A0、0X1000、0X2000、0X3000,它们之间的关系可以用下图来描述:
方框里面是变量本身的值,方框下面是变量的地址。
- C语言 二级指针详解及示例代码
- C语言二级指针
- C语言二级指针
- C语言 二级指针
- C语言二级指针
- C语言:一级指针,二级指针,三级指针,指针数组,数组指针的综合示例
- C语言基础及指针③函数与二级指针
- C语言基础及指针③函数与二级指针
- c语言之二级指针
- C语言:结构体中一级指针和二级指针的创建与释放示例
- C语言:结构体中一级指针和二级指针的创建与释放示例
- C语言中的二级指针(双指针)
- C语言中的二级指针(双指针)
- C语言中的二级指针(双指针)
- C语言中的二级指针(双指针)
- C语言之二级指针/双重指针
- C语言中的指针以及二级指针
- c语言二级指针和函数指针
- Linux 美化
- [树链剖分]bzoj 4034—— [HAOI2015]树上操作
- ≪统计学习精要(The Elements of Statistical Learning)≫课堂笔记(四)
- MySql修改 表名
- (学习java)写一个完整的程序,实现随机生成20个元素的链表,快速查找中间结点的值并显示
- C语言 二级指针详解及示例代码
- 根据两个经纬度坐标计算两个坐标间的距离
- Lintcode148 Sort Colors solution 题解
- 08-面向对象(继承-Java中的单继承和多重继承). 11-面向对象(继承-子父类中成员变量的内存图解) 11-面向对象(继承-子父类中成员变量的内存图解2
- 可以用作javascript异步模式的编程的方法
- 数据库系统概论学习笔记(一)---数据模型
- 银行家算法
- 左右为难
- 客户端架构