我希望函数返回一个多维数组。问题是函数不能返回多维数组,但它们可以返回指针。我可以返回一个指向多维数组的指针,但我担心指针会因函数返回而被破坏。
相反,我希望实现一个结构来处理多维数组,但我不确定如何初始化结构和函数返回类型。
示例实施:
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时,我收到错误:指针类型不兼容。
答案 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;
}
并记住在某些时候释放所有东西!