//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's
或1's
保存在数组的特定单元格中
然后由主
打印数组还建议流程是否正确?
答案 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**
方法。