首页 > 解决方案 > 将 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;

标签: c++malloc

解决方案


假设您正在为整数变量分配内存,然后我们使用指向整数的指针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;
}

推荐阅读