【发布时间】:2021-04-20 00:44:18
【问题描述】:
我尝试将二维数组传递给 C++ 中的函数,但我不明白:
//My array declaration:
int array[5][5]={{....}}; //I declared and filled the array with values
//My different function tries:
void passArr(int **array) //ERROR
void passArr(int *array[5]) //ERROR
void passArr(int *(*array)) //ERROR
void passArr(int (*(*array))) //ERROR
void passArr(int (*array)[5]) //WORKS
所有错误均为:[Error] cannot convert 'int (*)[5]' to 'int**' for argument '1' to 'void passArr(int**)'
为什么会出现错误,最重要的是,int *array[5] 和 int (*array)[5] 作为参数传递时有什么区别?
如果int (*array)[5] 有效,那么为什么int *(*array) 或int (*(*array))) 也无效?
【问题讨论】:
-
围绕 C++ 类型系统的一种解决方法是改用结构:
struct array5x5 { int data[5][5]; }; void passArr(array5x5 *array) { ... }。否则,请使用 C++ 类型,例如 std::array、std::vector... 您还可以使用int (&array)[5][5]之类的方式传递对数组的引用