具有 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]);
}
希望对您有所帮助。
一个函数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]);
}
希望对您有所帮助。