【问题标题】:passing 2D array of structure to a function将二维结构数组传递给函数
【发布时间】:2014-03-15 10:19:16
【问题描述】:

这是我的结构 结构查找

{
   char action;
   int state;
};

行和列的值是已知的,但它们是从文件中读取的。

main()   
{
   // other initialization...then
   lookup* table[rows][columns];
   for (int i = 0; i < rows;i++)
   {    
        for (int j = 0; j < columns;j++)
        {   
             table[i][j]=new (lookup);
        }
   }
}

然后我为表格的每个元素赋值 现在我想将此表传递给另一个函数以进行进一步操作 说,

void output(lookup* table)
{
     // print values stored in table 
}

如何将表格及其所有内容从 main() 传递给 output() 函数? 谢谢你的帮助..

【问题讨论】:

  • 因为这是 C++,所以你真的应该使用 vector 并尽可能避免使用 new。
  • 那不是二维结构数组;它是一个二维指针数组。
  • 将其包装在一个结构中并传入

标签: c++ multidimensional-array structure argument-passing


【解决方案1】:

将参数声明为双指针(假设您收到一维指针数组)。由于这样的数组连续位于内存中,因此您可以计算当前元素的位置。

void output(lookup** table, int rows, int cols)
{
  lookup* current_lookup = NULL;
  for (int i = 0; i < rows; i++)
  {   
    for (int j = 0; j < cols; j++)
    {
      current_lookup = table[i*cols + j];
      printf("Action: %c, state: %d\n", current_lookup->action, current_lookup->state);
    }
  }
}

您通过传递数组的第一个元素来调用它:

int main()   
{
   lookup* table[rows][columns];

   //....

   output(table[0]);
   return 0;
}

【讨论】:

  • @Nabla 我默默地假设在全局范围内存在适当的运算符:) 答案更新为更常见和“独立”的打印形式。
  • @MateuszGrzejek - 我收到编译错误错误:无法转换 'lookup* ()[(((sizetype)(((ssizetype)columns) + -1)) + 1)] ' to 'lookup**' for argument '4' to 'void output(int, int, int, lookup***)' output(rows,columns,final,table); ^
  • 这是完全错误的。 Type 的二维数组(即Type ar[N][M] not 在表示或实现上不等同于 Type **ar根本。后者提供语法糖,但它们'是不相同。
  • @MateuszGrzejek 我能够获得这些值,但它们现在不正常。但是,感谢您的帮助。
  • @MateuszGrzejek 但现在它给出了分段错误。
猜你喜欢
  • 1970-01-01
  • 2014-05-28
  • 1970-01-01
  • 2020-11-01
相关资源
最近更新 更多