我有一个指向该 Class Piece 实例的二维指针数组。 我这样声明数组:
板.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 和 black 变量在 Piece 类中是静态的,并在这段代码运行之前被初始化。
如你所见,奇怪的部分是我运行了这个语句:
(*grid)[3][3] = &Piece::white;
然而,当我打印出每一方的地址时,我得到了不同的地址!为什么是这样?我是 C++ 的新手,所以请放轻松!
最佳答案
第一个问题:如何打印“每一面的地址”?
原则上就是那行代码
(*grid)[3][3] = &Piece::white;
只是将 Piece::white
的地址复制到由存储在 grid[3][3] 中的地址标识的变量中。地址本身(即 grid[3][3]
)不应更改,只能更改它指向的值。
关于C++ 指针行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24101318/