【问题标题】:when is the memory allocated while declaring an array as pointer to array将数组声明为指向数组的指针时何时分配内存
【发布时间】:2012-09-20 08:59:30
【问题描述】:

在尝试分配 20x10 的二维数组时,在这些步骤中分配了哪些内存

第 1 步:int (*p)[10];

第 2 步:p = malloc( 20 * sizeof(*p) );

是否所有内存(20 x 10 x 4 字节)都在步骤 2 中分配 还是在步骤 1 中也分配了一些内存?

【问题讨论】:

标签: c declaration multidimensional-array dynamic-allocation


【解决方案1】:

步骤 1 创建一个指针作为自动变量。指向的类型是array-of-10-int

第 2 步为 20 个这样的数组分配内存(打印出 sizeof(*p) 以查看每个数组有多大 - 分配的块是 20 倍),并将指向该内存块的指针分配给 p

所以,p 现在指向由 20 个数组组成的数组的第一个元素-of-10-int

如果有助于理解,代码相当于:

typedef int my_array[10];
my_array *p = malloc(20 * sizeof(my_array));

第二行可能看起来更像你习惯使用的malloc。不过,您仍然可以(并且应该)使用sizeof(*p) 而不是sizeof(my_array)

malloc 非常简单——它接受一个数字,然后分配那么多字节。它不关心内存的类型。因此,当您不确定要分配多少内存时,您可以随时简单地打印该数字(或在调试器中查看)。

【讨论】:

    【解决方案2】:

    第一步只是一个指针,除了单个指针之外不分配任何东西。请记住,它是指向数组的指针,而不是指针数组。

    数组中使用的所有存储都由您的malloc() 调用分配。

    【讨论】:

      猜你喜欢
      • 2011-04-23
      • 2015-12-10
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多