c++ - 将 malloc 转换为 (void**)
问题描述
假设,在 C++ 中,我用来malloc
为 4x void 指针分配内存:
malloc(4*sizeof(void*))
由于malloc
返回一个 void 指针,我假设以下赋值是有效的:
void *x;
x=(void*)malloc(4*sizeof(void*));
但是,我在论坛上找到的大多数代码都是(void**)
在分配之前转换的,如下所示:
void **y;
y=(void**)malloc((4*sizeof(void*));
我知道这是一个“指向指针”的转换,但这有什么作用?(void**)
铸造有什么优势(void*)
?是因为我将内存分配给指针而不是值吗?
另一个问题......(void**)
在上述情况下的铸造是否等同于以下情况?
int *x;
x=(void*)malloc(4*sizeof(void*));
int **y;
y=&x;
解决方案
假设您正在为整数变量分配内存,然后我们使用指向整数的指针int*
假设如果你想为指针变量分配内存,那么我们使用指向指针的指针int**
也一样void*
,希望下面的例子对你有帮助。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int iVar = 99;
int *piVar;
int **ppiVar;
void *vptr;
void **vpptr; // here void * also, enough, but we should know when we extract, what to extract
piVar = malloc(sizeof(int));
*piVar = 10;
ppiVar = malloc(sizeof(int *));
*ppiVar = piVar;
vptr = &iVar;
vpptr = &vptr;
printf("piVar = %d , ppiVar = %d vptr = %d and vpptr =%d \n", *piVar,**ppiVar, *(int* )vptr, **(int **)vpptr);
return 0;
}
推荐阅读
- java - 更改我的 android 应用程序包名称是否会更改我的应用程序的 sha1 代码?
- python - Mac power save state - what is the state of still running existing process but can't launch new process?
- scala - 这个 Scala 部分函数是如何工作的?
- android - 如何不将 APK 发布到特定的 Android 版本?
- html - 使用 Cheerio 抓取 html 无法检索第二个连续元素
- java - How to getText from the disabled input field in selenium
- javascript - How do I write a test in JavaScript using the Sikuli library?
- python - 此模型尚未在 model.summary() 上构建错误
- jmeter - 如何自定义 JMeter 仪表板生成
- jquery - 是否可以基于 aria-hidden 值添加类、删除类?