在函数内部创建2D动态数组

时间:2017-12-22 11:11:21

标签: c++ arrays pointers reference

我知道simillar问题多次出现,但我仍然无法找到这种情况。我想拥有能够为进一步操作创建数组的功能。

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];
}

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

2 个答案:

答案 0 :(得分:0)

问题是您正在重新定义field函数中的new_field变量。只需删除重新定义。这是int** field = ...函数中field = ...的更改new_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);
}

答案 1 :(得分:0)

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

在函数内部重新声明name字段,编译器报告此

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];
}