将矩阵传递给函数

时间:2015-08-07 17:54:09

标签: c++ matrix multidimensional-array

调用'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;
}

3 个答案:

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

this link

中解释了其他可能的解决方案