我试图让一些函数在二维数组上运行:
void display_matrix(int**, int, int);
void gen_matrix(int**, int, int);
int main()
{
srand(time(0));
int m=5, n=3;
int my_matrix[m][n];
gen_matrix(my_matrix, m, n);
display_matrix(my_matrix, m, n);
}
我不知道什么是错的,但是当我调用这些函数时出现以下错误: [错误]无法转换' int()[(((sizetype)(((ssizetype)n)+ -1))+ 1)]'到' int *'争论' 1' to' void gen_matrix(int **,int,int)'
我知道我可以使用vector但我正在尝试练习并记住指针和数组的使用。
答案 0 :(得分:1)
声明<type> <name>[<dim1>][<dim2>]
形式的矩阵定义了一个内存块,其隐式步长为dim1。通过使用多个dim1来访问内部元素以到达正确的行并从那里通过第二个维度进行偏移。
类型<type> <name>**
是指向指针数组的指针 - 非常不同。该结构由一组指向数据行的指针组成。在调用子例程之前,必须对它们进行适当的分配和链接。也没有要求它们是连续分配的,并且需要对每个新行上的每个元素进行间接查找。
优点是行可以是不同的长度,适合一些没有矩形结构的算法。
答案 1 :(得分:0)
按以下方式更改代码
const int n = 3;
void display_matrix( int ( * )[n], int );
void gen_matrix( int ( * )[n], int);
int main()
{
srand(time(0));
const int m = 5;
int my_matrix[m][n];
gen_matrix( my_matrix, m );
display_matrix(my_matrix, m );
}
或者您可以按照定义保留您的功能,但可以将其称为
gen_matrix( reinterpret_cast<int **>( my_matrix ), m, n);