C++ 将二维数组作为参数传递给函数

C++ 将二维数组作为参数传递给函数,c++,multidimensional-array,C++,Multidimensional Array,如果我不知道数组的两个维度的大小,并且希望使用以下代码打印矩阵 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]); prin

如果我不知道数组的两个维度的大小,并且希望使用以下代码打印矩阵

    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");
    }
    

void printAnyMatrix(int(*A)[],int size\u A,int size\u B)
{

对于(inti=0;i简化签名:指针更易于人类读取

循环中还有一个错误:它小于,而不是小于或等于

void printAnyMatrix(int *A, int size_A, int size_B)<br />
{
   for (int i = 0; i<size_A; i++)
   {
       for (int j = 0; j<size_B; j++)
           printf("%d ", A[i*size_B + j]);
       printf("\n");
   }
   printf("\n");
}
void printAnyMatrix(int*A,int size\u A,int size\u B)
{
对于(int i=0;i使用
template
功能解决此类问题:

template<typename T, unsigned int size_A, unsigned int size_B>
void printAnyMatrix(T  (&Arr)[size_A][size_B])
{       // any type^^  ^^^ pass by reference        
}

如果要打印任何矩阵,可能需要同时打印静态和动态分配的矩阵

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;
}
模板
无效打印任意矩阵(T&A)[大小A][大小B])
{
对于(int i=0;istd::coutcannot将参数“1”的“int()[((无符号int)((int)size_B))+1)]转换为“int”,转换为“void printAnyMatrix(int*,int,int),这意味着您使用错误的int*参数调用prinAnyMatrix。您调用的参数实际上是一个int,而不是int*(对于第一个位置)int matrix[size_A][size_B],size_A,size_B;我正在调用printAnyMatrix(matrix,size_A,size_B);如果矩阵是int*,那么矩阵[A]是int,而矩阵[A][B]是编译器错误。没有匹配函数用于调用“printAnyMatrix(int[((无符号int)((int)size_A))][((无符号int)((int)size_B))]))注:候选者是:注意:模板无效printAnyMatrix(T(&)[(size_A)[(size_B)])没有从
int[m][n]
int**
的转换。使用2D数组调用函数将导致编译器错误。
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;
}