我努力将可变长度的C99静态3D数组传递给函数。我知道之前已经问过这个问题,但我尝试了迄今为止找到的所有解决方案,但没有一个能够工作。我有以下代码:
int N;
int foo( ? ){
// do stuff
}
int main(){
cin >> N;
int arr[N][N][N];
foo(arr);
return 0;
}
问题是放什么而不是'?'。除了其他的事情,我尝试创建一个指向这个3D数组的指针,并根据答案here传递指针,但也会编译。
答案 0 :(得分:0)
C ++没有变量样式的数组。你可以做的是将数组的地址转换为指针,并传递维度,甚至转换为指向相同大小但形状不同的数组的指针,然后取消引用该指针。
如果要在有限数量的可能形状之间进行选择,可以使用一种C ++技术来声明template< size_t L, size_t M, size_t N> int foo( int arr[L][M][N])
。另一个是包装数组及其维度的多维数组类。然后,您可以构造一个对象,该对象可以对数组进行别名而不是复制,您可以将其编入索引为arr(i, j, k)
。