为什么这个指向指针二维数组的指针会像这样分配新的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])将成为你在该阵容中创建的阵列中的ints之一。

另外,这是一种非常低效的内存布局。除非您的阵列可能会改变尺寸,或者是锯齿状的,否则更喜欢单个块的ints,顶部有伪造的2D索引。

以上是关于为什么这个指向指针二维数组的指针会像这样分配新的int的主要内容,如果未能解决你的问题,请参考以下文章

如何得到指针指向的数组的长度

C语言中关于二维数据指针的问题?

C语言中二维数组行指针是啥

二维数组和二级指针关系浅析

C语言:定义指向二维数组的指针变量

c 语言用指针表示二维数组的列 怎样表示