0

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

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

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

那么数组可以被任何东西填充(见这里)。但是我很难理解当我们用结构替换像这样的浮点数时会发生什么

typedef struct
{
   float x = 123.456;
} foo;

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

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

4

3 回答 3

3
typedef struct
{
   float x = 123.456;
} foo;

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

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

于 2012-07-03T16:32:08.870 回答
1

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

于 2012-07-03T16:33:58.590 回答
1

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

于 2012-07-03T16:39:54.230 回答