在C数组的结构中,什么是结构体初始化为?

时间:2012-07-03 16:30:43

标签: c struct initialization malloc

在动态创建的结构数组中,结构的每个条目都被初始化为什么?

详细信息:
如果我们像这样创建一个动态的浮点数组:

float* arr = ( float* ) malloc ( 100 * sizeof ( float ) );

然后可以用任何东西(see here)填充数组。但是,当我们将结构替换为像这样的浮点数时,我无法绕过发生的事情

typedef struct
{
   float x = 123.456;
} foo;

foo* arr = ( foo* ) malloc ( 100 * sizeof ( foo ) );

是否使用完全初始化的arr结构创建了数组foo的所有条目,还是我必须手动更新x值?

3 个答案:

答案 0 :(得分:3)

typedef struct
{
   float x = 123.456;
} foo;

您不能在结构类型中使用默认值。这不是有效的C代码。

malloc分配的对象具有不确定的值。

答案 1 :(得分:1)

浮子和结构之间没有区别。您需要手动初始化每个动态分配的内存区域。

答案 2 :(得分:1)

float案例可以“初始化”到任何事情应该提供你需要的答案 - 事实上它并没有初始化,但它可能包含任何内容,因为没有进行初始化。 struct也是如此 - 没有在分配时进行初始化,因此返回的内存段的(很可能)垃圾内容就是你得到的。如果你关心新分配的内存的内容(你可能应该这样做),你需要自己初始化它。