函数与void双指针输出

时间:2016-01-26 11:15:18

标签: c pointers void-pointers

一个函数返回一个void double指针,其中包含一个指向float数组的指针,如何访问输出数据?

$fields_form = array(
    'legend' => array(
        'title' => $this->('My Form'),
    ),
    'input' => array(
        'type' => 'switch',
        'label' => $this->l('required'),
        'name' => 'relab2',
        'is_bool' => true,
        'desc' => $this->l('required'),
        'values' => array(
            array(
                'id' => 'label2_on',
                'value' => 1,
                'label' => $this->l('Enabled')
            ),
            array(
                'id' => 'label2_off',
                'value' => 0,
                'label' => $this->l('Disabled')
            )
        )
    ),
);

$val = getValFromDB(); //example

$helper = new HelperForm();
$helper->module = $this;
$helper->name_controller = 'example';
$helper->title = $this->displayName;
$helper->submit_action = 'example_action';
// [...]
// [...]
// Here you provide your values
$helper->fields_value = array('relab2' => $val);

return $helper->generateForm(array(array('form' => $fields_form)));

此指针点必须指向浮点类型指针。

    void **pointer;

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

如何从此void双指针读取数据?我很困惑。

3 个答案:

答案 0 :(得分:0)

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

我认为你对所谓的“双指针”感到困惑。没有“双指针”这样的东西。指针指向某个东西,它不是双点。指针可能指向int(int *),或指向struct T(struct T *)或指向float *(float **)。在float **中有两个*,但这并不是一个“双指针”。它是一个普通的指针,恰好指向一个本身就是指针的东西。

最常使用指针作为函数参数,以便函数可以返回多个值。假设函数get_width_and_height返回int:

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

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

现在考虑到这个例子,你如何编写一个返回两个int和一个float *的函数?

答案 1 :(得分:0)

您的功能原型与您想要实现的目标无关。如果你希望你的函数分配内存并将其引用发送回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]);

}

如果这是目标,则有更简单的方法:

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]);
}

希望这有帮助。

答案 2 :(得分:-1)

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

我将假设你这样调用函数:

 void **pointer;
 function(pointer);

然后想要访问输出,所以

 flow *coord = (float *) *pointer;

然后你回家了