如何将void **数组(函数的返回值)赋给变量?

时间:2016-11-30 16:08:10

标签: c arrays pointers casting

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

在一个案例中似乎没有意义。

谢谢。

2 个答案:

答案 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