一个函数返回一个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双指针读取数据?我很困惑。
答案 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;
然后你回家了