我正在用C ++编写程序,我需要初始化我创建的struct对象的数组。它看起来像这样:
typedef struct {
float x;
float y;
} vec2;
然后我初始化一个这样的数组:
vec2 hotSpot[1000];
我想当我初始化这样一个数组时,它会完全为空,但是当我打印sizeof(hotSpot)的值时,它会说8000!
我在某个地方出错了,还是我误解了一些概念?如何将此数组设为空?
答案 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的名称