0

動的に作成された構造体の配列では、構造体のすべてのエントリは何に初期化されますか?

詳細:
float の動的配列を次のように作成する場合:

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

float と struct に違いはありません。動的に割り当てられたすべてのメモリ領域を手動で初期化する必要があります。

于 2012-07-03T16:33:58.590 に答える
1

ケースを何でも「初期化」できるという事実は、float必要な答えを提供するはずです。実際には初期化されていませんが、初期化が行われないため、何かが含まれている可能性があります。同じことが a にも当てはまりますstruct- 割り当て時に初期化が行われないため、返されるメモリセグメントの(おそらく)ゴミの内容が得られます。新しく割り当てられたメモリの内容が気になる場合 (そして、おそらく気にする必要があります)、自分で明示的に初期化する必要があります。

于 2012-07-03T16:39:54.230 に答える