C++ C++;行为古怪的指针
我有一个指向该类片段实例的2D指针数组。 我这样声明数组: 董事会h:C++ C++;行为古怪的指针,c++,arrays,visual-studio,pointers,C++,Arrays,Visual Studio,Pointers,我有一个指向该类片段实例的2D指针数组。 我这样声明数组: 董事会h: private: typedef std::array<Piece**, Board::BOARD_SIZE> row_type; typedef std::array<row_type, Board::BOARD_SIZE> array_type; array_type* grid; 然而,当我打印出每一方的地址时,我得到了不同的地址!为什么会这样?我是新的C++,所以请对
private:
typedef std::array<Piece**, Board::BOARD_SIZE> row_type;
typedef std::array<row_type, Board::BOARD_SIZE> array_type;
array_type* grid;
然而,当我打印出每一方的地址时,我得到了不同的地址!为什么会这样?我是新的C++,所以请对我放松! 第一个问题:如何打印“两边的地址” 原则上,这行代码
(*grid)[3][3] = &Piece::white;
只需将Piece::white的地址复制到由存储在网格[3][3]中的地址标识的变量中。地址本身(即,网格[3][3]
)不应更改,只应更改它所指向的值。此行不好:
grid = &array_type();
您正在网格中存储临时对象的地址。任何访问网格的内容都会受到未定义行为的影响
我建议改成
grid = new array_type();
所以让我直说吧。您有一个指向指向Piece
s的指针数组的指针。这听起来一点也不疯狂吗?就像我想象的那样,一系列的片段
s会做得很好。嗯,是的。我不太明白为什么。我想要一个2D指针数组,这样我就只能使用类片段的两个实际实例。显然我做错了,请解释原因!(昨天我开始了C++)抱歉,如果你是C++ C++的新手,你不应该使用这样的指针,比如说,像PieceRow订阅的2014BestMeCudiaDistaCurrimoPoT,而不是拉便宜的照片,帮助这个可怜的老太太穿过C++@ Gopgops这条奇怪的街道,你可以使用中介<代码> TyEuff数组;code>然后typedef数组片段数组代码>可读性稍微好一点
grid = &array_type();
grid = new array_type();