为什么这个指针到指针的二维数组像这样分配新的 int
Why does this pointer to pointer two dimensional array assign new int like this
我正在努力理解这段代码:
int **p_p_tictactoe;
p_p_tictactoe = new int*[ 3 ];
for ( int i = 0; i < 3; i++ )
{
p_p_tictactoe[ i ] = new int[ 3 ];
}
在行上: p_p_tictactoe[i] = new int [3];
方括号取消引用p_p_tictactoe一次,以便我们查看p_p_ticatactoe存储的地址的值,这是另一个地址,因为它是指向指针的指针。然后将此地址分配给一个新的int,但不应该将其分配给地址处的值而不是地址本身,如下所示:*p_p_tictactoe[i] = new int[3]
p_p_tictactoe
是一个int **
。
因此,p_p_tictactoe[i]
必须是int *
.
所以,*p_p_tictactoe[i]
一定是一个单身、孤独、int
。
将 new
的结果(此处为int *
(分配给int
不会有任何有用的结果。
另一种有用的看待方式是:*p_p_tictactoe[i]
等同于p_p_tictactoe[i][0]
。显然,这是一个int
,一个单元格,将指针塞进去,是行不通的。
No.
*p_p_tictactoe[i]
(也拼写为 p_p_tictactoe[i][0]
(将是您在该行上创建的数组中的int
之一。
顺便说一句,这是一个非常低效的内存布局。除非您的数组可能会改变尺寸或呈锯齿状,否则最好使用单个 int
块,并在顶部伪造 2D 索引。
相关文章:
- 将指针分配给另一个指针时会发生什么情况?
- C++将一个指针分配给另一个指针时执行的类型检查
- 我似乎无法为指针分配一个数组,然后更改数组的内容
- C++为 void 指针分配一个字符串
- 当我在 C++ 中将派生类的指针分配给指针时,地址会更改
- MPI 集合通信中的指针分配
- 函数指针分配在创建 DLL 后导致错误
- 通过双指针分配指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 我可以直接为指针分配地址吗?如果是,如何做到这一点
- 为什么为char指针分配内存不会截断char序列
- C++指针分配字符数组的地址
- 将 void 指针分配给另一个 void 指针
- 如何将不同的成员函数指针分配给注册类的不同实例?
- 如何为指针分配特定的内存地址?
- C++ - 无法将顶部常量指针分配给另一个非常量指针
- 将指针分配给另一个指针时会发生什么情况?
- 为指向C++中的对象/对象的指针分配堆内存
- 将指针分配给字符串变量中包含的地址
- 当直接分配时,为什么此功能指针分配起作用,而不是与有条件的操作员一起使用