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