我正在使用VS2010控制台应用程序中的2D数组。我正在分配数组:
Thing::Thing(int _n, bool _control){
m = _n;
control = _control;
thisArray = new int*[m];
for(int ii = 0; ii < m; ii++){
thisArray[ii] = new int[m];
for (int jj = 0; jj < m; jj++){
thisArray[ii][jj] = 0;
}
}
if (control == true){
int num = 1;
for (int jj = 0; jj < m; jj++){
for ( int ii = 0; ii<m; ii++){
if ((jj == (m-1)) && (ii == (m-1))){
std::cout << "inserting " << 0 <<
"at[" << ii << "][" << jj << "]" << std::endl;
thisArray[ii][jj] = 0;
std::cout << thisArray[ii][jj] << std::endl;
} else{
std::cout << "inserting " << num <<
"at[" << ii << "][" << jj << "]" << std::endl;
thisArray[ii][jj] = num++;
std::cout << thisArray[ii][jj] << std::endl;
}
}
}
pi.x = m-1;
pi.y = m-1;
}
}
然后我尝试通过
显示它void Thing::display(){
int x = 0;
int y = 0;
for( ; y < m; y++){
for( x = 0; x < m; x++){
if (Point(x, y) == pi){
std::cout << "[ ]";
}
std::cout << "[" << thisArray[x][y] << "]";
if ( x == m ){
std::cout << std::endl;
}
}
}
}
但是当我传入4时,它似乎只显示第一个维度作为输出,而true看起来像这样:
inserting 1 at[0][0]1
inserting 2 at[1][0]2
inserting 3 at[2][0]3
inserting 4 at[3][0]4
inserting 5 at[0][1]5
inserting 6 at[1][1]6
inserting 7 at[2][1]7
inserting 8 at[3][1]8
inserting 9 at[0][2]9
inserting 10 at[1][2]10
inserting 11 at[2][2]11
inserting 12 at[3][2]12
inserting 13 at[0][3]13
inserting 14 at[1][3]14
inserting 15 at[2][3]15
inserting 0 at[3][3] 0
[1][2][3][4]
,当我将数组添加到我的监视列表时,系统会显示指向单个值的指针,然后只显示第一个元素,而不是所有元素。
它不会抛出任何运行时访问错误,或类似的东西,但是当我尝试显示数组时,它只会执行第一行。注意:我被要求使用实际的二维整数数组,不允许使用预先编写的库或单维谎言。
编辑:添加了额外的输出信息。 edit2(已解决):在显示中将第二个for循环更改为
for (x = 0; x < m; x++)
当保持for循环外部的值时,确保它们被重置为循环迭代。
答案 0 :(得分:2)
在显示功能中,您必须在外部x
循环的每次迭代中重置y
。
如果你在for
语句中进行了初始化,那就更清楚了:
for(int y = 0; ; y < m; y++){
for(int x = 0; ; x < m; x++){
要在Visual C ++调试器中将指针视为数组,您可以查看that other question。