C++ 指针行为异常

标签 c++ arrays visual-studio pointers

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

相关文章:

c++ - typedef 中类型名的使用与继承

javascript - 如何在react-native中获取数组中的元素?

c# - ExtractMethodCodeRefactoringProvider 遇到错误并已被禁用的原因?

vb.net - Visual Basic 列出目录中的子目录

c++ - 如何使用条件语句返回指针?

c++ - 从套接字读取到 basic_filebuf

c++ - 使用特定于 2012 年 11 月 CTP 的 C++11 功能时,有没有办法抑制 Intellisense 错误?

Java:防御性复制 int[] 的最有效方法?

javascript - 如何在函数中使用 array.push

c++ - IplImage 的 cvLoadImage 工作,但 cv::Mat 的 cv::imread 不工作