将长度可变的 C99 静态 3D 数组传递给函数

Passing C99 static 3D array with variable length to a function

本文关键字:数组 3D 函数 静态 C99      更新时间:2023-10-16

我正在努力将可变长度的 C99 静态 3D 数组传递给函数。我知道以前在SO上已经问过这个问题,但是到目前为止我尝试了我找到的所有解决方案,但没有一个奏效。我有以下代码:

int N;
int foo( ? ){
// do stuff 
}
int main(){
cin >> N;
int arr[N][N][N];
foo(arr);
return 0;
}

问题是放什么而不是"?"。除其他外,我尝试创建一个指向此 3D 数组的指针并根据此处的答案传递指针,但这也可以编译。

C++没有变量样式的数组。 您可以做的是将数组的地址强制转换为指针,并将维度传递给指针,甚至强制转换为指向大小相同但形状不同的数组的指针,然后取消引用该指针。

如果您在有限数量的可能形状之间进行选择,您可以使用一种C++技术来加糖,那就是声明一个template< size_t L, size_t M, size_t N> int foo( int arr[L][M][N])。 另一个是包装数组及其维度的多维数组类。 然后,您可以构造一个对象,该对象别名而不是复制数组,您可以将其索引为arr(i, j, k)