【问题标题】:Using sizeof for a pointer to a pointer to an array of 2 floats使用 sizeof 作为指向 2 个浮点数组的指针的指针
【发布时间】:2010-12-29 15:06:04
【问题描述】:

我已经声明了这个变量:

float (**explosions)[4];

这将指向一个内存块,该指针指向具有 4 个浮点数的浮点数组的内存块。

当创建指向浮点数组的内存块的指针的内存块时,我在这里放什么。我应该只使用 void 指针吗?这将是一个选择,但不是一个好的选择。

explosions = realloc(explosions,sizeof(What goes here? It will be the size of a pointer to an array of 4 floats) * explosion_number);

在为数组创建内存块时,我猜这样可以吗?

explosions[explosion_number] = malloc(sizeof(float) * 64);

这是用 4 个元素组成 16 个浮点数组。我需要在内存中有 16 个这样的数组的原因是我可以删除冗余内存,这样我就可以将指向这些数组的指针设为 NULL,这样我就知道什么时候数组在冗余后被释放并且不需要更多处理。以防万一您想知道。

感谢您的帮助。

【问题讨论】:

    标签: c arrays pointers memory-management sizeof


    【解决方案1】:

    sizeof 可以与括号内的类型或表达式一起使用。当您执行sizeof <expression> 时,只检查表达式的类型但不计算它,因此取消引用空指针等不会有问题。

    这意味着您可以像这样编写reallocmalloc 调用:

    explosions = realloc(explosions, sizeof(*explosions) * explosion_number);
    explosions[explosion_number-1] = malloc(16 * sizeof(**explosions));
      // -1 because explosions array runs from 0 to (explosion_number-1)
    

    【讨论】:

    • 谢谢。另外,是的。如果没有减号,我会遇到问题。
    • 其实我还不如一直用这个来做 malloc。
    • @Matthew:这是一个很好的习惯用法,可以随时使用。当您必须更改类型时,它可以为您省去很多麻烦。
    猜你喜欢
    • 1970-01-01
    • 2021-07-26
    • 2016-03-27
    • 2021-02-19
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多