使用sizeof指向指向2个浮点数组的指针

时间:2010-12-29 15:06:05

标签: c arrays pointers memory-management sizeof

我已经声明了这个变量:

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,这样我知道数据在冗余后被释放,不再需要处理。万一你想知道。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

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)