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

时间:2014-11-12 04:00:31

标签: c++ arrays

//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保存在数组的特定单元格中

然后由主

打印数组

还建议流程是否正确?

2 个答案:

答案 0 :(得分:1)

关于语法错误,可能是由于之前显示的代码。

显示的代码,

 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来自std::vector标题{。}}。

这可以避免原始指针,<vector> - ing`,循环等等,这些都是您遇到的问题。


或者您可以这样声明:

new

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

答案 1 :(得分:1)

如果你想要一个200个bool数组的数组,你可以使用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**方法。