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

2024-11-03 05:26:30
推荐回答(4个)
回答(1):

1、多重指针常用于多维数组或者多维字符串的操作,有时也升纯用于函数参数传递;
2、指针是C语言的一个重要知识点,你可以简单理解为地址。多重指针需要通过多次寻址才能找到实际的值。这里一个示例:
# include
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这个具体的值。只要少吵旦咐一个*,那么获得的就是地址。

回答(2):

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

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信箱里。

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

回答(3):

int *p 定义了一个名叫p的指针它可以存储一个int型空间地址
好吧 那么这个p是不是也在内存上存在着? 是不是也会有自己的地址祥宴?
那么是不是也可能有一个指针保存着这个p的地址?
那么这个存储指针的地址的指针如何定义呢?
int **s 这也是一个指针 但是它能存储一个指针的地址(而不是一个普通的变裂伍量)
所以我们可以 这么做了
s=&p
那肆宴或么s是不是也有地址?....
下面继续往下推吧 就都是一个意思了...

回答(4):

举个简单的例子:
内存就像是仓库,里面的数据就判游是货物。
指针就是仓库房间对应的钥匙。
指向指针的指针,可以理解有一个房间的钥匙,辩冲早而这个房间里面专门放钥匙。。

无论携雀有多少层,自己想吧。