为什么这个指向指针二维数组的指针会像这样分配新的int
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么这个指向指针二维数组的指针会像这样分配新的int相关的知识,希望对你有一定的参考价值。
我正在努力用这段代码理解一些东西:
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
,一个单细胞,并且指针插入它,将无法工作。
另一答案
没有。
*p_p_tictactoe[i]
(也拼写为p_p_tictactoe[i][0]
)将成为你在该阵容中创建的阵列中的int
s之一。
另外,这是一种非常低效的内存布局。除非您的阵列可能会改变尺寸,或者是锯齿状的,否则更喜欢单个块的int
s,顶部有伪造的2D索引。
以上是关于为什么这个指向指针二维数组的指针会像这样分配新的int的主要内容,如果未能解决你的问题,请参考以下文章