c ++将自动矩阵传递给函数

时间:2011-05-28 17:17:23

标签: c++ matrix

  

可能重复:
  How do I use arrays in C++?

我有一个问题。    我必须使用auto darray(矩阵)。

const int size_m=10;
const int size_n=10;

void process(int *x)
{
  //i can pass array, all is well, i work as with dynamic allocated array
  for(int i=0;i<size_m;scanf("%d",&x[i]),i++);
}

void input_m(int **x) 
/*
mistake is here, 
a cause of my problem that i'm trying to work  with  matrix allocated in stack(auto matrix,local) as with dynamically allocated matrix.
i receive error like this : "cannot convert ‘int [100][100]’ to ‘int**’ in assignment" how should i pass it? 
*/
{
  for(int i=0;i<size_m;i++)
     for(int j=0;j<size_n;j++)
      scanf("%d",&x[i][j]);
}

int main()
{  
  int x[size_m];
  input(x);
  int matr_x[size_m][size_n];
  input_m(matr_x);
  return 0;
}

谢谢!它很有效..它像往常一样简单)

    const int sizem=3;
    const int sizen=3;

      void _input(int x[sizem][sizen])
        {

           for(int i=0;i<sizem;i++)
           for(int j=0;j<sizen;x[i][j]=1,j++);
         }

       int main()
         {
            int m=10,n=10;

             int x[sizem][sizen]={{1,2,3},{5,7,4}};

          _input(x);

           for(int i=0;i<sizem;i++)
            { for(int j=0;j<sizen;printf(" %d",x[i][j]),j++);
              puts("");
              }

          puts("");


           return 0;
               }

2 个答案:

答案 0 :(得分:2)

您的二维数组与您编写的函数不兼容,原因主要是内存如何在C中工作。

当您编写int matrix[size_m][size_n]时,您告诉编译器您需要一个sizeof(int)*size_m*size_n字节块,并且您打算在其中存储整数。

当您编写int ** x时,您告诉编译器x是指向整数的指针。如果你想使用x作为二维数组,那么x不仅应该指向一个指针,而应指向指针数组中的第一个指针,即包含指针的连续内存区域对于矩阵的每一行。但是在你发布的程序中,你没有任何指针数组。

由于您在编译时知道矩阵的维度,因此您可以通过更改x成为int x[size_m][size_n]的类型来解决此问题。更好的是,制作一个typedef:

typedef int MyMatrix[size_m][size_n];

void input_m(MyMatrix x){ ... }

int main()
{
    MyMatrix matr_x;
    ...
}

答案 1 :(得分:1)

首先,请参阅the answer to this question。如果将void input_m(int **x)更改为void input_m(int x[size_m][size_n])(假设size_msize_n都是常量),则应编译代码。请注意,正如我链接到的问题中所述,“通常,要将2D数组传递给函数,您需要指定除第一维之外的所有数组的数组维度。”