在C中返回多维数组

时间:2015-11-26 18:14:07

标签: c arrays multidimensional-array

我希望函数返回一个多维数组。问题是函数不能返回多维数组,但它们可以返回指针。我可以返回一个指向多维数组的指针,但我担心指针会因函数返回而被破坏。

相反,我希望实现一个结构来处理多维数组,但我不确定如何初始化结构和函数返回类型。

示例实施:

struct multiDReturn{
 int* arr;
};

struct multiDReturn someFunction(int a,int b,int c)
{
  int someArr[a][b][c];
  multiDReturn returnArr;
  returnArr.arr = someArr;


}

当我尝试将someArr分配给returnArr.arr时,我收到错误:指针类型不兼容。

1 个答案:

答案 0 :(得分:1)

此数组

int someArr[a][b][c];
someFunction返回时,

将超出范围。因此arr中的returnArr将是一个悬空指针。

同样someArr是一个3D数组,而不是指向int的指针。因此,您无法将其分配给arr

您要做的事情可能如下所示:

struct multiDReturn {
    int ***arr;
};

struct multiDReturn someFunction(int a, int b, int c) {
    int ***someArr = malloc(a * sizeof (*someArr));
    for (int i = 0; i < a; ++i) {
        someArr[i] = malloc(b * sizeof (**someArr));
        for (int j = 0; j < b; ++j) {
            someArr[i][j] = malloc(c * sizeof (***someArr));
        }
    }
    struct multiDReturn returnArr;
    returnArr.arr = someArr;

    return returnArr;
}

并记住在某些时候释放所有东西!