Share via


構造体の宣言

構造体宣言は型 「」という名前を付けて異なる型を持つことができる変数の値のシーケンスを示します (「メンバー」 「または構造体のフィールドと呼びます)。「タグと呼ばれるオプションの識別子」は構造体の名前を付け構造体の型への後続の参照に使用できます。この構造体の型の変数はシーケンス全体をその型で定義される保持します。C の構造は 「記録する他の言語であることがわかっている型に似ています。

構文

  • 構造体または共用体指定子 :
    構造体または共用体の識別子 opt**{** 構造体宣言リスト }

    構造体または共用体の識別子

  • 構造体または共用体 :
    struct

    union

  • 構造体宣言リスト :
    構造体宣言

    構造体宣言リスト構造体宣言

構造体の内容は次のように定義されます。

  • 構造体宣言 :
    修飾子指定子リスト構造体宣言リスト ;

  • 指定子 : リスト修飾子
    型指定子が指定子リスト修飾子 opt

    型修飾子を指定子リスト修飾子 opt

  • 構造体宣言リスト :
    構造体宣言

    構造体宣言リスト構造体宣言

  • 構造体宣言 :
    declarator

構造体の宣言で構造の空間を確保されません。これは構造体変数宣言の後の単なるテンプレートです。

前に定義された ID タグ () を他の場所で定義された構造体型を示すために使用できます。この場合 構造体宣言はリスト 定義が表示されるだけ繰り返すことはできません。構造体へのポインターや構造体の型の TypeDef 宣言で構造体の型が定義される前に構造体のタグを使用できます。ただし構造体の定義はフィールドのサイズを実際面前にキャッチされない場合があります。これは型と型のタグの不完全な定義です。完了がこの定義の型定義は同じスコープの後で使用する必要があります。

構造体宣言はリスト 構造体メンバーの型と名前を指定します。 構造体宣言リストの 引数は一つ以上の変数またはビット フィールドの宣言が含まれています。

構造体宣言リスト で宣言されている各変数は構造体のメンバーとして定義されます。 構造体宣言リスト 内の変数の宣言にはここで説明する他の変数宣言と同じ形式がありますが宣言はストレージ クラスの指定子または初期化子を含めることはできません。構造体メンバーの型 void不完全な型または型関数を除く変数の型を使用できます。

メンバーには構成要素の型を持つように宣言することはできません。ただしメンバーには構造体の型へのポインターとして構造体の型にタグと宣言できます。これは構造のリンク リストを作成できるようにします。

構造体は他の識別子と同じスコープに従います。構造体の識別子が同じ表示の他の構造体共用体列挙型の個々のタグである必要があります。

構造体宣言リスト の各 構造体宣言は リスト内で一意である必要があります。ただし 構造体宣言リスト の識別子名は通常の変数名または他の構造体宣言のリストから別の ID である必要はありません。

入れ子構造にはファイル スコープのレベルで宣言された方法でアクセスできます。たとえば次の宣言を指定します :

struct a
{
    int x;
    struct b
    {
      int y;
    } var2;
} var1;

これらの宣言も可能です :

struct a var3;
struct b var4;

これらの例は構造体の宣言を示しています :

struct employee   /* Defines a structure variable named temp */
{
    char name[20];
    int id;
    long class;
} temp;

employee の構造に 3 個のメンバーがあります : nameid と class。name のメンバーを 20 要素の配列です id と class は int と long の型を持つ単純なメンバーはそれぞれです。識別子 employee は構造体の ID です。

struct employee student, faculty, staff;

この例では3 種類の構造体変数を定義したものです : studentfaculty と staff。各構造体に 3 人のメンバーと同じものがあります。メンバーは前の例で定義した構造体の型 employee を持つように宣言されます。

struct           /* Defines an anonymous struct and a */
{                /* structure variable named complex  */
    float x, y;
} complex;

complex の構造に フローティング 型および xy の 2 個のメンバーがあります。したがって構造体型のタグがないため名前または匿名です。

struct sample   /* Defines a structure named x */
{
    char c;
    float *pf;
    struct sample *next;
} x;

構造の最初の 2 のメンバーは フローティング の値 char および変数へのポインターです。3 番目のメンバー next は定義された構造体の型へのポインターとして宣言されます (sample)。

無名構造というタグが必要な場合に便利です。これは1 種類の宣言で構造体のすべてのインスタンスを定義すると同じです。次に例を示します。

struct
{
    int x;
    int y;
} mystruct;

埋め込み構造体は匿名です。

struct somestruct
{
    struct    /* Anonymous structure */
    {
        int x, y;
    } point;
    int type;
} w;

Microsoft 固有の仕様 →

コンパイラは構造体の最後のメンバーとして可変長です。サイズの配列ができます。これによりさまざまな状況で使用される定数配列のサイズが異なる場合に便利です。このような構造体の宣言例を次に示します。:

struct の 識別子 {    設定の宣言     配列型の名前 [入力];};

可変長配列構造体の最後のメンバーとしてだけ使用できます。可変長配列宣言を含む構造体は他の構造体に追加のメンバーは包含構造体で宣言されない限り入れ子にできます。このような構造体の配列は使用できません。sizeof の演算子はこの型の変数または型自体に適用すると配列のサイズは 0 になります。

構造体宣言は宣言子なしで別の構造体または共用体のメンバーと指定できます。フィールド名は外側の構造に上位変換されます。たとえば無名の構造は次のようになります。:

struct s
{
    float y;
    struct
    {
        int a, b, c;
    };
    char str[10];
} *p_s;
.
.
.
p_s->b = 100;  /* A reference to a field in the s structure */

構造体の参照については構造体とクラス を参照してください。

終了 Microsoft 固有の仕様→

参照

概念

宣言子と変数宣言