Code Bye

谁能解释下多级指针(有点蒙了)

例如有个三级指针   int ***ppp;   (假定这个三级指针指向了一个二级指针,二级指针指向一级指针)
那么这个三级指针 ***ppp代表取出元素内容的话 那么**ppp 是什么意思?*ppp又是什么意思? 表示有点蒙了,谁帮本人解答下!
还有下面这段代码 一个三级指针***ppp 开辟10个二级指针本人能理解,但是三级指针不是应该存储二级指针的地址吗?*(ppp+i) 代表二级指针?*(ppp+i) 等价于ppp[i];   (ppp[i]不是一个一维指针吗?为什么能分配 1级指针?)   本人表示完全蒙了!求高手帮忙解答下!
#define N 12
void main8()
{
int  ***ppp = malloc(sizeof(int **)*N);//一个三级指针 分配N个二级指针
for (int i = 0; i < N; i++)
{
*(ppp+i) = malloc(sizeof(int *) * N);//ppp[i] N个二级指针分配N个一级指针
for (int j = 0; j < N; j++)
{
*(*(ppp+i)+j) = malloc(sizeof(int) * N);//ppp[i][j] N个一级指针分配N个0级指针
for (int k = 0; k < N; k++)
{
printf(“%6d”, *(*(*(ppp + i) + j) + k) = i * N*N + j * N + k);
}
printf(“\n”);
}
printf(“\n”);
}
system(“pause”);
}
解决方案

1

除了***ppp外,p,*p,**p都是指针

4

指针也是一种变量,只是其中保存的是地址。
假如x是指针,则*x表示该地址中的内容。
所谓二级、三级指针,只是这个内容本身还是地址而已

10

这个可以先从数组来理解,然后在改为动态分配的内存
int a[2][3][4]={
{{1,2,3,4},{5,6,7,8},{9,10,11,12}},
{{13,14,15,16},{17,18,19,20},{21,22,23,24}},
};
int *p =&a[0][0][0];//一级整型指针,直接指向整型对象 a[0][0][0];这样 *p 就是 a[0][0][0];
int **pp=&p;//二级整型指针,直接指向整型指针p, *pp就是 p; **pp 就是  a[0][0][0];
int ***ppp =&p;//三级指针指向二级指针pp, *ppp就是 pp,**ppp 就是p,***ppp 就是 a[0][0][0];
再看动态分配
int ***ppp= (int ***) malloc(sizeof(int **)* 2);//3级指针,分配一个二级指针数组,储存 2个二级指针
for(int i=0;i<2;i++){
*(ppp+i) = (int **) malloc(sizeof(int *)*3); //每个二级指针,分配3个一级指针,储存 3个一级指针
}
for(int i=0;i<2;i++){
for(int j=0;j<4;j++)
{
*( *(ppp+i)+j) = (int **) malloc(sizeof(int)*4);//每个一级指针,分配4个整形对象,储存 4个整型数据。
}
}
***ppp 就是 *(*(*ppp)))
也就是ppp指向 *ppp ,*ppp 指向 **ppp ,**ppp 指向***ppp;
通过三次间接引用,才能找到对应的整型对象
读取 ***ppp 要先读取 **ppp
读取 **ppp 又要 先读取 *ppp
这样 才能去去读 ***ppp 这个 对象。

10

所谓的级,其实就是间接引用的次数。
二级 整型指针,不能直接指向 整型对象。
三]级 整型指针,不能直接指向一级 整型指针。
只有一级 整型指针可以直接指向 整型对象。

1

三]====>三

8

非得用三级指针这种东西吗,一般二级就够用了。
http://sysuor.blog.163.com/blog/static/8620131200832051039568/

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明谁能解释下多级指针(有点蒙了)