在C ++中初始化一个空数组

时间:2012-03-30 23:44:24

标签: c++ arrays struct

我正在用C ++编写程序,我需要初始化我创建的struct对象的数组。它看起来像这样:

typedef struct {
float x;
float y;
} vec2;

然后我初始化一个这样的数组:

vec2 hotSpot[1000];

我想当我初始化这样一个数组时,它会完全为空,但是当我打印sizeof(hotSpot)的值时,它会说8000!

我在某个地方出错了,还是我误解了一些概念?如何将此数组设为空?

6 个答案:

答案 0 :(得分:6)

您的数组不是,并且永远不会“空”。它拥有并将永远拥有1000个元素。这就是C ++数组的本质。

问题是这些元素不处于任何确定性状态,实际上访问尚未初始化的任何元素是未定义的行为

更一般地说,C ++中的对象永远不会“空”。它们总是存在的。如果对象不存在,则不会有对象。一些对象总是以确定的状态存在,而其他对象(例如原始类型,或者在std::move d之后的命名对象)可以存在于未初始化或不确定状态 - 它们仍然存在,但是唯一的东西你被允许使用它们为它们分配一个值。

答案 1 :(得分:2)

当您将hotSpot初始化为1000的数组时,vec2 hotSpot[1000];不能为空。其中有1000个元素。

发生hotSpot时,会将所有1000个值都设为uninitialized variable.

{{1}}中的元素无效,因为它们尚未初始化。如果您希望将它们全部设置为零,则可以使用memset将它们全部初始化为零。

有关数组的更多信息,请查看this reference

答案 2 :(得分:0)

它们在数据方面是空的,但是分配的内存能够容纳1000 * 2 float * 4字节

答案 3 :(得分:0)

我猜你想用这种方式初始化你的'空'数组:

vec2 hotSpot[]; // Defines an array of undefined length

但是如果你想把它初始化为'空',即用零填充整个内容:

vec2 hotSpot[1000]; // Defines an array of 1000 items in length
memset(hotSpot, 0, sizeof(hotSpot)); // Fill the array with zeros

答案 4 :(得分:0)

你的机器中浮动只有4个字节。初始化时,hotSpot总共占用8000个。

答案 5 :(得分:-1)

请给你的结构一些名字。括号后面给出的名称是对象的名称而不是类/ Struct的名称