在了解了上述一级指针和二级指针的一个关系之后,我们再来看另外一个例子:
现在有如下代码:
int main(void){ int **ipp; int i = 5,j = 6,k = 7; int *ip1 = &i,*ip2 = &j; }
如果这个时候,我们加了这么一句代码:
ipp = &ip1;
那么上述所涉及到的数据之间的关系是这样的:
变量关系图
根据上面这个图我们也可以知道,对于 ipp 的两次解引用的结果是 i 的值,也就是说 **ipp = 5,我想对于这个的理解并不困难,如果我继续在这个基础上添加代码,注意,是在上条代码的基础上添加如下代码:
*ipp = ip2;
在这条代码的作用下,数据关系图就发生了改变,改变如下所示:
数据关系图
对于上述的变化来说,我们增加的代码改变的是 *ipp 的值,也就是说 ipp 的值是不会发生改变的,既然 ipp 的值不会发生改变,那么 ipp 指向 ip1 的关系不会发生改变,我们增加的代码改变了 *ipp 的值,那么也就是说改变了一级指针指向的值,而 ip2 是指向 j 的,所以也就有了上述的变化。
紧接着我们继续在第一条增加的代码的基础上重新增加一条代码,增加的代码如下:
*ipp = &k;
那么这个时候所对应的数据关系图如下图所示:
数据关系图