gpt4 book ai didi

c++ - 指针、数组和新运算符

转载 作者:行者123 更新时间:2023-11-30 04:03:10 26 4
gpt4 key购买 nike

int (*ptr)[3]=new int [1][3];

我知道 int (*ptr)[3] 创建一个指向 3 元素整数数组的指针。我知道 new int [1][3] 动态分配一些大小为 1 row x 3 col x 4 bytes (32-bit machine) = 12 bytes 的内存。我也明白 ptr [0] = &ptr [0] 在这种情况下。

  1. 这里分配的总内存是 3 * 12 字节。为什么?
  2. 为什么左轴上的 3 取决于右轴上的 3?如果我们在 RHS 上使用 3,我们必须在 LHS 上使用 3。我不能使用 2 或 4。

也许这是一个微不足道的逻辑,但我似乎没有找到这方面的好文献。

最佳答案

首先,分配的总内存不是 3*12 字节。它是3*1*sizeof(int) + k 字节,其中 k 未指定(但在大多数实现,在分配数组时将为 0int).

其次,两个 3 必须相等,因为它们是类型。在左侧,类型是“指向 3 int 的指针”。在对,您正在分配一个“1 个 3 int 数组的数组”;由于数组 new 的语义,表达式是指向 3 int 数组(以及任何信息关于它是 int[1][3] 还是 int[2][3] 还是其他已丢失)。 C++ 使用静态类型检查(对于大多数部分),所以编译器必须知道类型的所有部分编译时间。

关于c++ - 指针、数组和新运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24648071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com