在C函数中返回2维数组

时间:2012-02-20 11:18:16

标签: c multidimensional-array

我想用C语言编写一个函数,它将2维数组返回给我的main函数。

4 个答案:

答案 0 :(得分:4)

int类型返回动态分配的二维数组的函数。

int ** myfunc(size_t width, size_t height) 
{
    return malloc(width * height * sizeof(int));
}

一旦不再使用,必须使用free删除。

EDIT 这只为数组分配了 space ,可以通过指针算法进行访问,但遗憾的是,array[x][y]之类的索引运算符不能。

如果你想要这样的东西here是一个很好的解释。归结为这样的事情:

int ** myfunc(size_t ncolumns, size_t nrows)
{
    int **array;
    array = malloc(nrows * sizeof(int *));
    for(i = 0; i < nrows; i++)
    {
        array[i] = malloc(ncolumns * sizeof(int));
    }
}

答案 1 :(得分:4)

只需返回malloc( x * y * sizeof(type) );

即可

当您尝试将数组索引为二维数组时,这将产生分段错误。

int **a = malloc(10 * 10 * sizeof(int));

a[1][0] = 123;
a[0][1] = 321;

以上结果:Segmentation fault

您需要首先使用c/malloc()创建一个指针数组,然后迭代此指针数组并为每个指针分配宽度空间。

void *calloc2d(size_t x, size_t y, size_t elem_size) {
    void **p = calloc(y, sizeof(void*));
    if(!p) return NULL;

    for(int i = 0; i < y; i++) {
        p[i] = calloc(x, elem_size);
        if(!p[i]) {
            free2d(y, p);
            return NULL;
        }
    }

    return (void*)p;
}

免费

void free2d(size_t y, void *matrix) {
    if(!matrix) return;

    void **m = matrix;
    for(int i = 0; i < y; i++) {
        if(m[i]) free(m[i]);
    }
    free(m);

    return;
}

答案 2 :(得分:1)

我猜应该很简单......

char **functioName(char param[][20])
{
  char[][20] temp = malloc(20 * 20 * sizeof char);


 //processing  
  return temp

}

答案 3 :(得分:1)

如果你知道数组的大小,你可以这样做:

int (*myfunc())[10] {
 int (*ret)[10]=malloc(10*10*sizeof(int));
 return ret;
}

此函数返回指向10个10个整数数组的指针。

当然,您应该按原样使用它,并且在使用后不要忘记释放它。