Needed:一个返回两个不同值(int,str)的函数
所以foo计算smth。并存储两个值的地址 在返回数组中。
现在我想将这些值读回这些类型的变量中。
void** foo(){
void** bar = malloc(2 * sizeof(void*));
...
return bar;
}
int main(int argc, char* argv[]){
void** result = foo();
int* val1 = (int*)result[0];
char* val2 = (char*)result[1];
}
此代码段未编译。
问题不是代码,而是我在案例分支中宣布它 没有任何计算指示。
int main(int argc, char* argv[]){
switch(xyz){
case a:
void** result = foo();
int* val1 = (int*)result[0];
char* val2 = (char*)result[1];
break;
}
}
在一个案例中似乎没有意义。
谢谢。
答案 0 :(得分:3)
如果您想要使用void**
,则表明程序设计不佳。忘了这个想法。一般来说void
指针是你应该避免的。
你真正想做的事情似乎是这样的:
typedef struct
{
int i;
char c;
} something_t;
something_t* foo (void)
{
something_t* result = malloc (sizeof(*result));
...
return result;
}
int main(int argc, char* argv[]){
something_t* result = foo();
int* val1 = &result->i;
char* val2 = &result->c;
}
如果结构成员需要是指针,只需更改结构。
答案 1 :(得分:1)
你应该使用结构来完成你的工作
#include <stdio.h>
#include <stdlib.h>
#define STRING_WIDTH 32
struct test
{
int val1;
char *val2;
};
struct test *foo(void)
{
struct test *bar = malloc(sizeof(struct test));
if (bar != NULL)
{
bar->val1 = 0;
bar->val2 = calloc (STRING_WIDTH, 1);
if (bar->val2 == NULL)
return NULL;
}
return bar;
}
int main( void )
{
struct test *result = foo();
if (result != NULL)
{
// USE YOUR STRUCT
}
return 0;
}
请注意malloc
内存必须为free
d