0

如何从 C 中的函数返回 1000 个变量?
这是一个面试问题,我无法回答。

我想在指针的帮助下,我们可以做到这一点。我是指针的新手,C 任何人都可以使用指针或不同的方法给我解决这个问题的解决方案吗?

4

4 回答 4

3

将它们全部打包在一个结构中并返回该结构。

struct YourStructure
{
    int a1;
    int b2;

    int z1000;
};

YouStructure doSomething();
于 2012-08-20T10:59:21.607 回答
1

如果它是同一类型的 1000 倍(例如 int 的):

void myfunc(int** out){
  int i = 0;
  *out  = malloc(1000*sizeof(int));
  for(i = 0; i < 1000; i++){
    (*out)[i] = i;
  }
}

此函数为 1000 个整数(整数数组)分配内存并填充数组。

该函数将以这种方式调用:

int* outArr = 0;
myfunc(&outArr);

outArr使用后必须释放所持有的内存:

free(outArr);

看到它在 ideone 上运行:http: //ideone.com/u8NX5


替代解决方案:不是myfunc为整数数组分配内存,而是让调用者完成工作并将数组大小传递给函数:

void myfunc2(int* out, int len){
  int i = 0;
  for(i = 0; i < len; i++){
    out[i] = i;
  }
}

然后,它是这样调用的:

int* outArr = malloc(1000*sizeof(int));
myfunc2(outArr, 1000);

outArr同样,调用者必须释放内存。


第三种方法:静态内存。myfunc2使用静态内存调用:

int outArr[1000];
myfunc2(outArr, 1000);

在这种情况下,不必分配或释放内存。

于 2012-08-20T11:02:00.487 回答
1

数组指针方法:

int * output(int input)
{
    int *temp=malloc(sizeof(int)*1000);
    // do your work with 1000 integers
    //...
    //...
    //...
    //ok. finished work with these integers
    return temp;
}

结构指针方法:

struct my_struct
{
    int a;
    int b;
    double x;
    ...
    //1000 different things here
    struct another_struct;
}parameter;


my_struct * output(my_struct what_ever_input_is)
{
    my_struct *temp=malloc(sizeof(my_struct));
    //...
    //...
    return temp;
}
于 2012-08-20T11:06:09.333 回答
0

这就是你在 C 中的做法。

void func (Type* ptr);
/*
   Function documentation.
   Bla bla bla...

   Parameters
   ptr      Points to a variable of 'Type' allocated by the caller. 
            It will contain the result of...

*/

如果你的意图不是通过“ptr”返回任何东西,你会写

void func (const Type* ptr);

反而。

于 2012-08-20T11:14:50.860 回答