c++将automatrix传递给函数

c++ pass auto matrix to function

本文关键字:函数 automatrix c++      更新时间:2023-10-16

可能重复:
如何在C++中使用数组?

我有个问题。我必须使用autodarray(矩阵)。

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

您的二维数组与您编写的函数不兼容,原因是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;
    ...
}

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