C语言高手进关于双重指针 多重指针的问题

问题1.C语言中为什么要使用多重指针它有什么具体用处问题2.如果int*p可以这样解释定义了一个名叫p的指针它可以存储一个int型空间地址那么int***p应该阐述地址的... 问题1.C语言中为什么要使用多重指针 它有什么具体用处
问题2. 如果int * p 可以这样解释定义了一个名叫p的指针它可以存储一个int型空间地址 那么int ***p 应该阐述 地址的地址的地址 是个什么东西啊? 头都弄晕
哪位高手能从内存的角度给我分析下上面两个问题
展开
 我来答
konfu
2018-04-11 · TA获得超过106个赞
知道小有建树答主
回答量:100
采纳率:82%
帮助的人:33.4万
展开全部
1、多重指针常用于多维数组或者多维字符串的操作,有时也用于函数参数传递;
2、指针是C语言的一个重要知识点,你可以简单理解为地址。多重指针需要通过多次寻址才能找到实际的值。这里一个示例:
# include<stdio.h>
int main()
{
unsigned int x=0x1234;
unsigned int *p1=NULL;
unsigned int **p2=NULL;
unsigned int ***p3=NULL;

p1=&x;
p2=&p1;
p3=&p2;

printf("\n x=0X%X, &x=:0X%X",x,&x);
printf("\n *p1=0X%X, p1=:0X%X, &p1=:0X%X",*p1,p1,&p1);
printf("\n **p2=0X%X, *p2=:0X%X, p2=:0X%X, &p2=0X%X",**p2,*p2,p2,&p2);
printf("\n***p3=0X%X, **p3=:0X%X, *p3=:0X%X, p3=:0X%X, &p3=:0X%X",***p3,**p3,*p3,p3,&p3);

return 0 ;
}
显示结果:

x=0X1234, &x=:0X6C56C298
*p1=0X1234, p1=:0X6C56C298, &p1=:0X6C56C290
**p2=0X1234, *p2=:0X6C56C298, p2=:0X6C56C290, &p2=0X6C56C288
***p3=0X1234, **p3=:0X6C56C298, *p3=:0X6C56C290, p3=:0X6C56C288, &p3=:0X6C56C280
所有类型变量都可以通过&获得该变量在内存中的地址,从以上示例看出
变量x在内存中的地址为:0X6C56C298
指针变量p1的地址为:0X6C56C290
指针变量p2的地址为:0X6C56C288
指针变量p3的地址为:0X6C56C280
以上变量按照定义先后顺序在内存中从高地址到低地址连续存储的,每个变量占据8个字节空间。
其中p3的值(也就是0X6C56C280这个地址的内存中存放的数据)为p2的地址。
p2的值(也就是0X6C56C288这个地址的内存中存放的数据)为p1的地址。
p1的值(也就是0X6C56C290这个地址的内存中存放的数据)为x的地址。
要取得最终的0x1234这个数据,几重指针前面就有几个*,比如***p3就表示0x1234这个具体的值。只要少一个*,那么获得的就是地址。
jesry_wu
2018-04-11 · TA获得超过942个赞
知道小有建树答主
回答量:793
采纳率:72%
帮助的人:207万
展开全部

其实只要清楚一点:指针也是一个变量,所以它也是有地址的,你就会不头晕了。

int ***p也就是一个指针而已,只不过,它是int **类型的指针.  假如有一个变量a,三个指针p, p1, p2.  a的地址放在p2里, 而p2是个指针,自己也是有地址的,而p2的地址放在p1里, p1也是个指针,它的地址又放在p里。所以我们想要通过p来取出a的值,那就要先从p中取出p1的地址,然后找到p1,再从p1中取出p2的地址,再找到a,取出a的值。所以这几个变量的定义和赋值分别是 :

int a ;
int *p2 ;
int **p1 ;
int ***p ;  

p2 = &a ;
p1 = &p2 ;
p = &p1 ;

如果把内存单元比喻成是一个个的信箱,每个信箱的钥匙就代表信箱的地址,那就是a信箱里面放的是a的值,a的钥匙放到p2信箱里,p2的钥匙放到p1的信箱里, p1的钥匙放到p信箱里。

这个在编程中还是有用处的,特别是在对复杂的数据结构做处理的时候,这样的指针优势就来了,处理灵活,速度快,但也会带来很大的风险。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
feelmeu
2010-12-10 · TA获得超过617个赞
知道小有建树答主
回答量:402
采纳率:66%
帮助的人:161万
展开全部
int *p 定义了一个名叫p的指针它可以存储一个int型空间地址
好吧 那么这个p是不是也在内存上存在着? 是不是也会有自己的地址?
那么是不是也可能有一个指针保存着这个p的地址?
那么这个存储指针的地址的指针如何定义呢?
int **s 这也是一个指针 但是它能存储一个指针的地址(而不是一个普通的变量)
所以我们可以 这么做了
s=&p
那么s是不是也有地址?....
下面继续往下推吧 就都是一个意思了...
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱白天睡觉
2010-12-10 · TA获得超过253个赞
知道小有建树答主
回答量:229
采纳率:0%
帮助的人:101万
展开全部
举个简单的例子:
内存就像是仓库,里面的数据就是货物。
指针就是仓库房间对应的钥匙。
指向指针的指针,可以理解有一个房间的钥匙,而这个房间里面专门放钥匙。。

无论有多少层,自己想吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式