繁体   English   中英

声明和初始化全局2D数组

[英]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's1'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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM