int (*ptr)[3]=new int [1][3];
我理解int(* ptr)[3]创建一个指向3元素整数保持数组的指针。 据我所知,new int [1] [3]动态分配一些大小为1行x 3 col x 4字节(32位机器)= 12字节的内存。 在这种情况下,我也理解ptr [0] =& ptr [0]。
也许这是一个微不足道的逻辑,但我似乎没有找到关于此的好文献。
答案 0 :(得分:2)
首先,分配的总内存不是 3*12
字节。它' S
3*1*sizeof(int) + k
个字节,其中k
未指定(但在
大多数实现,在分配数组时将为0
int
)。
其次,两个3
必须相等,因为它们是其中的一部分
类型。在左边,类型是"指向3 int"的指针。在
是的,你正在分配一个3个int"的1个数组的"数组;
因为数组new的语义,类型
表达式为point to array of 3 int
(以及任何信息
关于它是int[1][3]
还是int[2][3]
还是其他什么
已经失去了)。 C ++使用静态类型检查(最多
部分),因此编译器必须知道该类型的所有部分
编译时间。
答案 1 :(得分:0)
鉴于您目前提供的信息,我只能回答您问题的第二部分:
Why is the 3 on the LHS dependent on the 3 on the RHS?
int (*ptr)[3] // creates a pointer to an array of 3 ints
这意味着你的变量ptr
应该只指向一个长度为三的数组数组,当你编写new int [1][3]
时,你实际上是在创建一个长度为三的数组(一行)(2-D)数组)只。类似地,new int [2][3]
会给你一个有两行的三个数组。(二维数组)这就是为什么两个三个都相互依赖的原因。