为什么这个指向指针二维数组的指针会像这样

时间:2018-03-01 13:23:30

标签: c++ arrays pointers

我很难用这段代码理解:

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]

2 个答案:

答案 0 :(得分:2)

p_p_tictactoeint **

因此,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索引伪造在顶部。