在函数内部创建2D动态数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在函数内部创建2D动态数组相关的知识,希望对你有一定的参考价值。
我知道类似的问题会出现几次,但我仍然无法找到这种情况。我想有一个功能,可以为进一步的操作创建数组。
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];
}
“重新定义形式参数'字段'”出现了,但我也尝试了其他指针选项:/
答案
问题是你正在重新定义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);
}
另一答案
对于初学者,变量字段应具有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];
}
以上是关于在函数内部创建2D动态数组的主要内容,如果未能解决你的问题,请参考以下文章