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

时间:2011-12-18 09:05:07

标签: 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]);
           printf("\n");
       }
       printf("\n");
    }
    


编译器给出

  

错误无法转换'int(*)[(((unsigned int)((int)size_B))+ 1)]'   'int()[]'将参数'1'改为'void printAnyMatrix(int()[],   int,int)

1 个答案:

答案 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需要您明确声明类型。

如果您仍有编译错误,请显示矩阵的声明。