我有一个指针的2D数组,指向那个Class Piece的实例。 我像这样声明数组:
Board.h:
private:
typedef std::array<Piece**, Board::BOARD_SIZE> row_type;
typedef std::array<row_type, Board::BOARD_SIZE> array_type;
array_type* grid;
之后,此代码运行:(这就是问题所在)
grid = &array_type();
for (int i = 0; i < Board::BOARD_SIZE; i++) {
for (int j = 0; j < Board::BOARD_SIZE; j++) {
(*grid)[i][j] = NULL;
}
}
(*grid)[3][3] = &Piece::white;
(*grid)[4][4] = &Piece::white;
(*grid)[3][4] = &Piece::black;
(*grid)[4][3] = &Piece::black;
ofstream fout;
fout.open("Debug.txt");
fout << "Board cpp" << &Piece::white << endl;
fout << "Board cpp 2" << (*grid)[3][3] << endl;
fout.close();
Piece :: white&amp;黑色变量在Piece类中是静态的,并在此代码运行之前进行初始化。
如你所见,奇怪的是我运行这句话:
(*grid)[3][3] = &Piece::white;
然而,当我打印出每一侧的地址时,我会得到不同的地址!为什么是这样?我是C ++的新手,所以请放轻松我!
答案 0 :(得分:1)
第一个问题:你如何打印&#34;每一方的地址&#34;?
原则上,那行代码
(*grid)[3][3] = &Piece::white;
只需将Piece::white
的地址复制到由grid [3] [3]中存储的地址标识的变量中。地址本身(即grid[3][3]
)不应该改变,只改变它指向的值。
答案 1 :(得分:1)
这条线不好:
grid = &array_type();
您正在grid
中存储临时对象的地址。访问grid
的任何内容都会受到未定义的行为。
我建议将其改为
grid = new array_type();