[英]Declaring and initializing a global 2D array
//gives the error expecting a declaration
int** my_array;
for (int i=0; i<200; i++)
{
my_array[i]= new int [200];
}
//initialize array with zeroes
for (int i = 0; i<200; i++)
{
for (int j = 0; j<200; j++)
{
my_array[i][j] =0;
}
}
简单来说:
2D数组是全局声明的
它在主体中初始化。 主函数调用将0's
或1's
保存在数组的特定单元格中的函数
然后由主打印该数组
还请问流程是否正确?
关于语法错误,可能是由于显示代码之前的某些原因。
显示的代码,
int** my_array;
for (int i=0; i<200; i++)
{
my_array[i]= new int [200];
}
//initialize array with zeroes
for (int i = 0; i<200; i++)
{
for (int j = 0; j<200; j++)
{
my_array[i][j] =0;
}
}
作为函数的主体可以很好地进行编译。
关于不正确且使用麻烦构造的逻辑,请执行以下操作:
auto my_array = vector<vector<bool>>( 200, vector<bool>( 200 ) );
其中vector
是<vector>
标头中的std::vector
。
这样就避免了原始指针, new
-ing`,循环等,这些都是您发现有问题的。
另外,您可以这样声明:
vector<vector<bool>> my_array( 200, vector<bool>( 200 ) );
注意, 全局变量通常很麻烦,最好避免。
如果要由200个布尔数组组成的数组,可以使用std :: array和std :: bitset。
#include <bitset>
#include <array>
//...
std::array<200, std::bitset<200>> my_array;
其次,即使您修复了语法错误,您的代码也是错误的。 您将需要通过以下方式创建my_array:
int** my_array;
//...
my_array = new int * [200];
for (int i = 0; i < 200; ++i )
my_array[i] = new int [200];
然后,您必须在某处删除此内存:
for (int i = 0; i < 200; ++i )
delete [] my_array[i];
delete [] my_array;
创建一个连续块并仅使用对new[]
两次调用的替代方法:
my_array = new int * [200];
int *pool = new int [200*200];
for (int i = 0; i < 200; ++i, pool += 200 )
my_array[i] = pool;
然后,您必须在某处删除此内存:
delete [] my_array[0];
delete [] my_array;
但是我建议您使用容器,例如std :: array,std :: bitset,std :: vector等,而不要使用int**
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.