Mik*_*las 1 c c++ multidimensional-array
我想通过传递硬编码数组来测试一个运行时分配的多维数组的函数.
该函数具有签名,void generate_all_paths(int** maze, int size)数组定义为int arr[5][5] = {REMOVED}.
我不确定如何正确强制该函数的数组(或者如果这是不可能的).
不幸的是,这个多维数组主题让许多C++程序员感到困惑.嗯,这是解决方案:
void generate_all_paths(int (*maze)[5], int size);
Run Code Online (Sandbox Code Playgroud)
这就是函数声明必须看起来的样子.另一种选择,但完全相同
void generate_all_paths(int maze[][5], int size);
Run Code Online (Sandbox Code Playgroud)
两者都创建一个参数,该参数是指向5个整数数组的指针.然后,您可以将包含5个整数的数组数组传递给该函数:
generate_all_paths(arr, 5);
Run Code Online (Sandbox Code Playgroud)
因为数组的第一个元素是一个包含5个整数的数组,所以当传递给该函数时,它将自动(隐式)转换为指向第一个元素的指针.
在注释中,您已经显示您已绑定到int**,因为内部和外部维度都必须具有运行时值.不能再使用多维数组.你可以为测试目的做的是创建一个像这样的指针数组:
int store[5 * 5] = { ..... };
int *arr[5] = { store, store + 5, store + 10, store + 15, store + 20 };
Run Code Online (Sandbox Code Playgroud)
然后,实际上,你可以让你的函数接受一个int**.作为你数组的第一个元素然后是a int*,它将int**自动转换为a .另一种方法是将数据保存在二维数组中,但只是创建一个由指向该数组的指针构成的"视图":
int *arr[5] = { store[0], store[1], store[2], store[3], store[4] };
Run Code Online (Sandbox Code Playgroud)
商店是你的int[5][5]阵列.由于store[n]访问该二维数组的第n个子数组及其元素类型,因此int指针转换后的类型int*将再次兼容.