C语言指针间接引用

int a = 10;    //普通变量
int *p = &a;    //一级指针。是变量的地址。
int **pp = &p;    //二级指针。是一级指针的地址。
int ***ppp = &pp;    //三级指针。是二级指针的地址。   

p里面存着的是地址。假设变量a的地址是0xaa00,p里面存着的就是0xaa00。

如果你用%p格式去输出p,会得到p == 0xaa00

什么是间接引用?

间接引用就是在p前面加*号,就是*p,它的作用和意义是:找到p里面存着的那个地址0xaa00,并找到这个地址对应的内存空间,输出这个内存空间里面存储的内容。因此可以用%d格式去输出*p,你会得到的结果是*p == 10。

因为他通过p里面存着的地址0xaa00找到变量a,并输出了变量a存储的值10。

由此可得,对多级指针进行间接引用可以推出如下等式:

*ppp == pp == &p;  //对三级指针ppp进行间接引用,结果是二级指针pp的值,也就是一级指针p的地址。
**ppp == *pp == p == &a;  //对三级指针ppp进行2次间接引用,等于对二级指针pp进行间接引用,结果是一级指针p的值,也就是变量a的地址。
***ppp == **pp == *p = a;  //对三级指针ppp进行3次间接引用,等于对二级指针pp进行两次间接引用,结果是等于对一级指针p做1次间接引用,结果是a变量的值。
原文地址:https://www.cnblogs.com/zengyu1234/p/14038267.html