具有 void 双指针输出的函数

function with void double pointer output

一个函数returns一个包含指向浮点数组指针的空双指针,我如何访问输出数据?

    void **pointer;

    // function(void **ptr)
    function(pointer);

这个指针必须指向一个float类型的指针。

   float *coords; 
   coords = (float*)malloc(3*500*sizeof(float)); //I know the amount of memory to be allocated

如何从这个空双指针中读取数据?我很困惑。

由于问题不明确,我将不得不在这里做一些假设

我假设您是这样调用函数的:

 void **pointer;
 function(pointer);

然后想访问输出,就这样

 flow *coord = (float *) *pointer;

那你就可以自由回家了

请检查您的代码。您发布的内容是无稽之谈 - 您有一个未初始化的变量并将其传递给函数。这是未定义的行为,甚至在函数开始执行之前就可能崩溃或更糟。

我认为您对所谓的 "double pointer" 感到困惑。没有 "double pointer" 这样的东西。一个指针指向某物,它没有 double-point。指针可能指向一个 int(一个 int*),或一个 struct T(struct T*)或一个 float*(一个 float**)。在 float** 中有两个 *,但这并不能使它成为 "double pointer"。它是一个普通的指针,恰好指向本身就是指针的东西。

最常使用指针作为函数参数,因此函数可以return多个值。说一个函数 get_width_and_height returning 到整数:

void get_width_and_height (int* width, int* height) {
    *width = 10;
    *height = 20; 
}

int x, y;
get_width_and_height (&x, &y); 

现在记住这个例子,你会如何编写一个 return 两个 int 和一个 float* 的函数?

您的函数原型与您想要实现的目标不符。如果您希望您的函数分配内存并将其引用发送回 main,那么您的函数将如下所示(考虑到您要传递双指针):

void function(void ***ptr)
{
    float *coords; 
    coords = (float*)malloc(3*500*sizeof(float)); 
    *ptr = (void **) &coords;
    //do something
    return;
}

main()
{
    void **pointer;
    function(&pointer);
    /* Accessing first member of array allocated in function */
    printf("%f", (*((float **)pointer))[0]);

}

如果是objective,还有更简单的方法:

void function(void **p)
{
    float *coords;
    coords = (float*)malloc(3*500*sizeof(float));
    *p = coords;
     return;
}

main()
{
    void *pointer;
    function(&pointer);
    printf("%f", ((float*)pointer)[0]);
}

希望对您有所帮助。