【发布时间】:2014-07-09 07:47:36
【问题描述】:
int (*ptr)[3]=new int [1][3];
我知道 int (*ptr)[3] 创建了一个指向 3 元素整数保存数组的指针。 我知道 new int [1][3] 动态分配一些大小为 1 行 x 3 列 x 4 字节(32 位机器)= 12 字节的内存。 我也明白 ptr [0] = &ptr [0] 在这种情况下。
- 此处分配的总内存为 3 * 12 字节。为什么?
- 为什么 LHS 上的 3 依赖于 RHS 上的 3?如果我们在 RHS 上使用 3,我们必须在 LHS 上使用 3。我不能使用 2 或 4。
也许这是一个微不足道的逻辑,但我似乎没有找到这方面的好文献。
【问题讨论】:
-
1.你从哪里得到这个号码的? 2.意思不明确。你说的是哪种依赖?
-
你怎么知道它是 3 * 12 字节?
-
@n.m. 1. 我检查了与ptr [0]、ptr [1]和ptr [2]中的每一个相关联的内存地址,它们都相隔12个字节。所以 12 个字节 * 3 个这样的块。 2. 依赖关系:如果我们在 RHS 上使用 3,我们必须在 LHS 上使用 3。我不能使用 2 或 4。我无法想象这里分配了什么。 (编辑问题)
-
1.没有
ptr[1]。你只分配了一个大小为 1 的数组,所以你只能访问ptr[0]。当然还有ptr[0][0]、ptr[0][1]和ptr[0][2]。 -
我试图在 GCC 上检查这个。当我打印 ptr[0]、ptr[1] 和 ptr[2] 的值时,我得到了有效的结果。它们与 &ptr[0]、&ptr[1] 和 &ptr[2] 相同。有什么理由让我弄错了吗?
标签: c++ arrays pointers new-operator dynamic-memory-allocation