如果我不知道数组的两个尺寸的大小,并希望使用以下代码打印矩阵
void printAnyMatrix(int (*A)[], int size_A, int size_B)
{
for (int i = 0; i<=size_A; i++)
{
for (int j = 0; j<=size_B; j++)
printf("%d ", A[i][j]);
printf("\n");
}
printf("\n");
}
错误无法转换'int(*)[(((unsigned int)((int)size_B))+ 1)]' 'int()[]'将参数'1'改为'void printAnyMatrix(int()[], int,int)
答案 0 :(得分:1)
如果要打印任何矩阵,可能需要打印静态和动态分配的矩阵。静态分配矩阵的函数如下所示
template <class T, int size_A, int size_B>
void printAnyMatrix(T (&A)[size_A][size_B])
{
for (int i = 0; i < size_A; i++)
{
for (int j = 0; j < size_B; j++)
std::cout<<A[i][j]<<' ';
std::cout<<'\n';
}
std::cout<<std::endl;
}
动态分配矩阵的函数:
template <class T>
void printAnyMatrix(T **A, int size_A, int size_B)
{
for (int i = 0; i < size_A; i++)
{
for (int j = 0; j < size_B; j++)
cout<<A[i][j]<<' ';
cout<<'\n';
}
std::cout<<std::endl;
}
你可以将它们放在同一个翻译单元中,编译器会选择适合你矩阵的那个。 (注意:对于静态分配的矩阵,您需要一个参数,而动态分配的参数需要三个)
如果您使用的是C ++,请考虑使用cout
代替printf
。它为所有基本类型重载,而printf
需要您明确声明类型。
如果您仍有编译错误,请显示矩阵的声明。