我有一个问题。 我必须使用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;
}
答案 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_m
和size_n
都是常量),则应编译代码。请注意,正如我链接到的问题中所述,“通常,要将2D数组传递给函数,您需要指定除第一维之外的所有数组的数组维度。”