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

Declaring and initializing a global 2D array

本文关键字:2D 数组 全局 初始化 声明      更新时间:2023-10-16
//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 数组

它在主中初始化。main 调用一个函数,该函数将0's1's保存在数组的特定单元格中

然后由主打印数组

还要建议流程是否正确?

如果你

想要一个包含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**方法。

关于您的语法错误,这可能是由于您显示的代码之前的某些内容造成的。

显示的代码,

 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 ) );

请注意,全局变量通常很麻烦,最好避免使用。