【问题标题】:How Pass 2-D Array to Function in CPP如何在 CPP 中将二维数组传递给函数
【发布时间】:2020-10-09 17:51:03
【问题描述】:
vector<string> printPath(int m[MAX][MAX], int n) {
// Your code goes here
string curr_path;
path_finder((int*)m,0,0,curr_path,n);
return ans;}
//`void path_finder(int *m,int i,int j,string &curr_path,int n)
{
     if(m[i][j]==0)return;}`

//error:`prog.cpp: In function void path_finder(int*, int, int, std::__cxx11::string&, int):
prog.cpp:44:15: error: invalid types int[int] for array subscript
      if(m[i][j]==0)return;`

你好上面提到的是代码错误谁能解释我如何传递一个二维数组作为参考

【问题讨论】:

标签: c++ pass-by-reference


【解决方案1】:

您只需向函数传递一个简单的指针。 假设你有一个这样的数组:

int my_buff[4][5];

并且您想检查或更改其中的单元格。 您可以使用如下指针:

void change( int *buff)
{
    *(buff+1+5*2)=55; // Will change my_buff[2][1] to 55
}

【讨论】:

  • 我同意@HolyBlackCat - 如果允许的话,您可以通过将其设为int my_buff[4*5]; 的一维数组来保存答案。
【解决方案2】:

不应使用用户 mhheydarchi 给出的答案。在 C++ 中,我认为这是错误的。

你的问题是:

如何将二维数组传递给 CPP 中的函数

答案是:

如果您想将二维数组传递给函数,则需要使用特殊语法。

您可以通过引用或指针传递。数组维度必须是编译时常量。这是 C++ 的要求。

请看:

constexpr size_t NumberOfRows = 3;
constexpr size_t NumberOfColumns = 4;

// Typedef for easier usage
using IntMatrix2d = int[NumberOfRows][NumberOfColumns];

//Solution 1 ------
// Pass by reference
void function1(int(&matrix)[NumberOfRows][NumberOfColumns])  {}

// Pass by pointer
void function2(int(*m)[NumberOfRows][NumberOfColumns])  {}

//Solution 2 ------
// Pass by reference
void function3(IntMatrix2d& matrix) {}

// Pass by pointer 
void function4(IntMatrix2d* matrix) {}


int main()
{
    // Solution 1
    // Handwritten matrix. Dimension is compile time constant
    int matrix1[NumberOfRows][NumberOfColumns];

    // Pass by reference
    function1(matrix1);

    // Pass by pointer
    function2(&matrix1);

    // Solution 2 -----
    IntMatrix2d matrix2;

    // Pass by reference
    function3(matrix2);

    // Pass by pointer
    function4(&matrix2);

    return 0;
}

如果您使用using(或typedef)进行类型定义,那么它会变得相当直观。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-01
    相关资源
    最近更新 更多