我很难用这段代码理解:
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]
答案 0 :(得分:2)
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
,一个单元格,并将指针塞入其中,不会起作用。
答案 1 :(得分:0)
没有
*p_p_tictactoe[i]
(也拼写为p_p_tictactoe[i][0]
)将是您在该行上创建的数组中的int
之一。
另外,这是一种非常低效的内存布局。除非你的数组可能会改变尺寸,或者是锯齿状的,否则更喜欢单个int
块,其中2D索引伪造在顶部。