调用'printMat'函数时出错。我的要求是在接受行数和列数后创建矩阵,然后将输入输入到矩阵中,然后通过发送矩阵并打印元素来调用printMat。错误如下:
错误:参数'a'包含指向未知bo数组的指针 und'int []'
#include<iostream>
using namespace std;
int row,col;
void printMat(int* a[])
{
for(int i=0; i<row; ++i)
{
for(int j=0; j<col; ++j)
{
cout<<a[i][j]<<" ";
}
}
}
int main()
{
cin>>row;
cin>>col;
int mat[row][col];
for(int i=0; i<row; ++i)
{
for(int j=0; j<col; ++j)
{
cin>>mat[i][j];
}
}
printMat(mat);
return 0;
}
答案 0 :(得分:3)
int* a[]
是一个指针数组,但是您正在传递一个指向数组的指针:
int (*a)[]
答案 1 :(得分:1)
它不起作用的原因是数组只是一场噩梦。在C ++中,我们使用vector
代替。
#include<iostream>
#include<vector>
using namespace std;
void printMat(vector<vector<int>> mat)
{
for(vector<int> one_row : mat)
{
for(int one_cell_in_this_row : one_row)
{
cout << one_cell_in_this_row << ' ';
}
cout << endl;
}
}
int main()
{
int row,col;
cin>>row;
cin>>col;
vector< vector<int> > mat( row , vector<int>(col,0) );
// ^ ^
// initialize the vector ~~~~~/ |
// with 'row' items, each |
// of which is a vector |
// of 'col' integers. ~~~~~~~~~~~~~~~~~~~~~~~~~/
for(int i=0; i<row; ++i)
{
for(int j=0; j<col; ++j)
{
int current_entry;
cin>>current_entry;
mat.at(i).at(j) = current_entry;
}
}
printMat(mat);
return 0;
}
答案 2 :(得分:-1)
您可以使用指针算法解决。请参阅以下代码。
#include<iostream>
using namespace std;
int row,col;
void printMat(int *a)
{
for(int i=0; i<row; ++i)
{
for(int j=0; j<col; ++j)
{
cout<< *((a+i*col) + j)<<" ";
}
}
}
int main()
{
cin>>row;
cin>>col;
int mat[row][col];
for(int i=0; i<row; ++i)
{
for(int j=0; j<col; ++j)
{
cin>>mat[i][j];
}
}
printMat((int *)mat);
return 0;
}
中解释了其他可能的解决方案