您的位置:首页 > 编程语言 > C语言/C++

C语言难点解析之void *类型指针转换成二级指针的操作

2018-02-26 23:27 811 查看
在群里看到小伙伴贴了一段代码如下:



P为void *类型的指针,并且使用calloc分配好了内存,第二个红框内的内容该怎么理解呢?
我的理解是,这里先将p强转成类型为Base的二级指针,然后“*”表示解这个二级指针(取P的值),由于p是个二级指针,(const Base **) p就是P指向的之前calloc分配的那块内存首地址,*(const Base **) p的值为之前malloc分配内存的值,*(const Base **)p = base ;就是将base的值赋给malloc分配的内存的值。所以最后*p 里保存的是base的值。
下面写个demo验证下我的想法:#include <stdio.h>

#include <stdlib.h>
int main(void)
{
int a = 100;
void *p = malloc(sizeof(int));
*(int **)p = &a;
printf("the addr of a is %p\n",&a);
printf(" *p is %p\n",(unsigned int *)*(int *)p);
//(*(int *)p) 正好是&a的值,这个值是地址,所以还需要再强转成int*型,最后再用*取值
printf(" **p is %d\n",*((int *)(*(int *)p)));
return 0;
}
结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐