C语言结构体双指针疑问
第一个动态分配了若干个struct_name_count*的空间,假设是10,也就是创档培建了一个10个元素的数组,里面存放的是御蠢州指针。第二个是放在循环中的,那么就是循环10次,又为每一个指针元素分配了一个那个结构体的空间。所以总共做的事是,创建了一个指针数组,为每个指针镇蔽分配了一个结构体的空间。
在c语言中如果这样声明指针,char **p=NULL; 使用了两个取消引用运算符,为什么要用两个?
这是双重指针,可以这样写char *p[]=NULL,意思是定义了一个指针数组,数组元素都是指针。
C语言高手进关于双重指针 多重指针的问题
1、多重指针常用于多维数组或者多维字符串的操作,有时也用于函数参数传递;
2、指针是C语言的一个重要知识点,你可以简单理解为地址。多重指针需要通过多次寻址才能找到实际的值。这里一个示例:
# includestdio.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这个具体的值。只要少一个*,那么获得的就是地址。