ホームページ >バックエンド開発 >C++ >C および C では、自動構造体と配列はどのように部分的に初期化されますか?

C および C では、自動構造体と配列はどのように部分的に初期化されますか?

DDD
DDDオリジナル
2024-12-19 05:32:21200ブラウズ

How are Automatic Structures and Arrays Partially Initialized in C and C  ?

C および C での自動構造体と配列の部分初期化

GNU C リファレンス マニュアルには、構造体変数が初期化されていない場合、そのメンバーの値は不定です。ただし、標準では構造体または配列の部分的な初期化は定義されていません。

部分的な初期化の用語

「部分的な初期化」とは、すべてではなく一部の初期化子を提供することを指します。集合体 (配列または構造体)。

自動構造体と配列

C および C 標準では、自動構造体と配列の初期化に関する次の規則が指定されています。

  • 集合体が完全に初期化されている場合 (つまり、集合体に十分な初期化子がある場合)すべての要素またはメンバー)、初期化された要素/メンバーには指定された値が割り当てられ、残りの要素/メンバーはゼロで初期化されます (整数型の場合)。 NULL で初期化されます (ポインター型の場合)。
  • 集合体が初期化されていない場合、すべての要素/メンバーは不定になります。

部分初期化動作

部分初期化が標準で明示的に定義されていない場合でも、すべての主流のコンパイラは次に従います。動作:

  • 自動配列の場合、配列のサイズより初期化子の数が少ない場合、初期化されていない要素は 0 に初期化されます。
  • 自動構造体の場合、初期化子の数が少ない場合構造体メンバの数よりも初期化されていないメンバは値が初期化されます。 C では、これは、クラス データ メンバーがデフォルトで初期化され、非クラス データ メンバーがゼロで初期化されることを意味します。

次の Cコードは構造体を部分的に初期化します:

struct S {
    int a;
    char* b;
    int c;
};

S s = {1, "asdf"};

この例では、s.a は次のように初期化されます。 1、s.b は "asdf" に初期化され、s.c は明示的に初期化されていないため、ゼロで初期化されます。

以上がC および C では、自動構造体と配列はどのように部分的に初期化されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。