在数据结构中存在着大量的二级指针这体现了指针与指针之间的关系。
首先要知道一级指针只能用于存放普通变量的地址和一级指针地址。
二级指针只能存放指针的地址和二级指针地址。
同样的三级 甚至是多级指针能存放的是他前一级指针的地址以及同级指针地址。
int a=5;
int *m=Null
int **p=null;
int **p=null;
m=&a; / /正确一级指针指向int变量m的内存
m=&p; //错误一级指针不能指向二级指针的地址
p=&m; //正确二级指针指向一级指针的地址
p=&a; // 错误二级指针不能指向int 变量的地址
当我们要在一个函数中改变一个一级指针所保存的值(地址)的时候我们需要用一个二级指针的形参(参量)来保存实参(参数)的地址,这样我们就能够通过对二级指针解引用(二级指针所保存的地址也就是一级指针的地址)这样我们就能够操作实参的地址来进行修改他的值;
如图:
在调用函数的时候会把实参的地址赋值给二级指针变量p=&q=001;我们可以通过二级指针解引用来操作实参例如:
*P:地址001对应的内容我们可以吧一个地址赋值给*p。
*p=003;
对应内存模型为:
这样我们就能通过二级指针来操作一级指针了,同样我们还能通过二级指针来操作003地址所对应的内容(此时该内容是一个int行变量存放的值,int指针只能指向int变量(不考虑强制内存转换))。
例如我们在函数中为结构体指针分配内存:
下面看看利用一级指针形参保存一级指针实参地址情况
可以看出我们在get、函数中并没有修改到mian中的S的值。
更多用法自行体会。。。。
转载请标明原贴出处:https://blog.csdn.net/zj490044512