当前位置:  开发笔记 > 编程语言 > 正文

将int [5] [5]类型的变量传递给需要int**的函数

如何解决《将int[5][5]类型的变量传递给需要int**的函数》经验,为你挑选了1个好方法。

我想通过传递硬编码数组来测试一个运行时分配的多维数组的函数.

该函数具有签名,void generate_all_paths(int** maze, int size)数组定义为int arr[5][5] = {REMOVED}.

我不确定如何正确强制该函数的数组(或者如果这是不可能的).



1> Johannes Sch..:

不幸的是,这个多维数组主题让许多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*将再次兼容.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有