【问题标题】:Creating 2D dynamic array inside function在函数内创建二维动态数组
【发布时间】:2017-12-22 11:11:21
【问题描述】:

我知道类似的问题出现了好几次,但我仍然找不到这个案例。我想要一个可以为后续操作创建数组的函数。

in main:
    int *field;
    new_field(&field);

void new_field(int **field){    
   int **field = new int*[max_height];
   for (int i = 0; i < max_width; ++i)
      field[i] = new int[max_width];
}

“形式参数'字段'的重新定义”出现,但我也尝试了其他带有指针的选项:/

【问题讨论】:

  • 如果你使用 C++,我建议你使用std::vector。
  • int **field 你正在使用局部变量定义来隐藏你的函数参数。

标签: c++ arrays pointers reference


【解决方案1】:

问题是您在new_field 函数中重新定义了field 变量。只需删除重新定义。也就是说,在new_field 函数中将int** field = ... 更改为field = ...。

#define max_height 10
#define max_width 10

void new_field(int **field){    
    field = new int*[max_height];
    for (int i = 0; i < max_width; ++i)
        field[i] = new int[max_width];
}
int main(){
    int *field;
    new_field(&field);
}

【讨论】:

  • 哦,这太简单了:c。谢谢!
  • 如果您认为此答案正确,请点赞,如果您认为正确,请将其标记为已解决。
【解决方案2】:

对于初学者,变量字段的类型应为int **。

在你重新声明名称字段的函数内部,编译器会报告这个

void new_field(int **field){    
   int **field = new int*[max_height];
   //...

在循环中你必须使用max_height 而不是max_width

   for (int i = 0; i < max_height; ++i)

您可以使用引用类型作为参数。例如

int **field;
new_field( field );

//...

void new_field(int ** &field ){    
   field = new int*[max_height];

   for (int i = 0; i < max_height; ++i)
      field[i] = new int[max_width];
}

但实际上该函数分配了几个一维数组。

如果变量max_width 是编译时常量,那么确实可以分配一个二维数组。例如

int ( *field }[max_width];
new_field( field );

//...

void new_field(int ( * &field )[max_width] ){    
   field = new int[max_height][max_width];
}

【讨论】:

    猜你喜欢
    • 2013-02-22
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 2017-06-01
    • 2019-04-19
    • 2015-07-15
    • 1970-01-01
    相关资源
    最近更新 更多