返回类型为int时返回int数组*

时间:2018-03-08 17:23:50

标签: c

我有一个像这样描述的功能

int * oddNumbers(l, r, int* result_size){
   static int res[r-l];
   int index = 0;
   while(l < r){
      if(l % 2 != 0){
         res[index] = l;
         index++;
      }
      l++;

   }
   result_size = &index;
   return res;
}

这是我遇到的一个问题。我不明白的是如何返回一个整数数组。我已经找到了多种方法来做到这一点。声明变量static,并为变量分配内存。

我知道这样做的行业方法是允许调用者为返回值分配内存。但是,遗憾的是我只能访问该程序的那部分功能。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

这个问题通常通过动态内存分配来解决。

在极少数情况下,如果您无法访问malloc / free,则可以使用自己的内存分配器。这是一个&#34;仅限分配&#34;产生指针达到特定预分配限制的示例:

#define MAX_SIZE 65536

int * oddNumbers(int l, int r, int* result_size){
    static int raw[MAX_SIZE];
    static int* current = raw;
    int size = r-l;
    // Make sure that allocation size is positive
    if (size <= 0) {
        return NULL;
    }
    // Make sure we have enough available memory remaining in raw[]
    ptrdiff_t available = &raw[MAX_SIZE] - current;
    if (available < size) {
        return NULL;
    }
    // Allocate "size" elements from raw
    int *res = current;
    current += size;
    int index = 0;
    while(l < r){
        if(l % 2 != 0){
            res[index++] = l;
        }
        l++;
    }
    return res;
}