gpt4 book ai didi

C++ 指针行为异常

转载 作者:行者123 更新时间:2023-11-28 02:46:59 25 4
gpt4 key购买 nike

我有一个指向该 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com