为什么这个指针到指针的二维数组像这样分配新的 int

Why does this pointer to pointer two dimensional array assign new int like this

本文关键字:指针 分配 int 像这样 二维数组 为什么      更新时间:2023-10-16

我正在努力理解这段代码:

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 索引。