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

时间:2018-05-19 22:49:19

标签: c++ static c99

我努力将可变长度的C99静态3D数组传递给函数。我知道之前已经问过这个问题,但我尝试了迄今为止找到的所有解决方案,但没有一个能够工作。我有以下代码:

int N;

int foo( ? ){

  // do stuff 

}

int main(){

   cin >> N;
   int arr[N][N][N];

   foo(arr);

return 0;
}

问题是放什么而不是'?'。除了其他的事情,我尝试创建一个指向这个3D数组的指针,并根据答案here传递指针,但也会编译。

1 个答案:

答案 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)