構造体型オブジェクトを作成するには,型指定子
struct タグ {struct-宣言}
struct タグ
のいずれかを使用します。struct-宣言 には,構造体タグ 型がもつ「メンバ」のリストを指定します。例えば,文献リストの場合,次のように宣言すれば,
/* Example 11.1 */
struct ref {
       char author[40];        /* 著者 */
       char title[80];         /* タイトル */
       int  year;              /* 発行年 */
       char resource[120];     /* 出典元 */
};
構造体ref型が charの配列 author,title,resource,そして int型変数 year を「メンバ」に持つ「文献」(reference)を意味します。
* タグ,或いは列挙体メンバを含む場合は,宣言子はオプションである。このため,上の宣言は文法上間違いではない。
しかしながら,上の場合,型指定子のみの宣言で宣言子がないため,オブジェクト(変数)は未だありません。オブジェクトを意味する識別子の導入が必要です。例えば,
/* Example 11.2 */
struct ref {
       char author[40];        /* 著者 */
       char title[80];         /* タイトル */
       int  year;              /* 発行年 */
       char resource[120];     /* 出典元 */
};
struct ref paper, book;
とすれば,識別子 paper や book は構造体ref型オブジェクトであり,paper がある「論文」,book がある「本」だとすれば,それらは著者(author),タイトル(title),発行年(year),そして出版元(resource)をメンバに持ちます。
 宣言の文法に従えば,構造体ref型とオブジェクトを同時に指定することもできます。
/* Example 11.3 */
struct ref {
       char author[40];        /* 著者 */
       char title[80];         /* タイトル */
       int  year;              /* 発行年 */
       char resource[120];     /* 出典元 */
} paper, book;
Example 11.2 と同じ意味になります。
 構造体型は集成体型(集合体型)であるため,初期化は配列と同じように波括弧 { } の初期化子を使います。メンバの個数より少なく指定すると,残りは各メンバの型に合わせ 0 がメモリに記憶されます。[C99, 6.7.8, 21]
/* Example 11.4 */
struct ref {
       char author[40];        /* 著者 */
       char title[80];         /* タイトル */
       int  year;              /* 発行年 */
       char resource[120];     /* 出典元 */
} paper = {
       "J. von Neumann",
       "Zur Theorie der Gesellschaftsspiele",
       1928,
       "Mathematische Annalen"
};
struct ref book = {
       "J. von Neumann and O. Morgenstern",
       "Theory of Games and Economic Behavior",
       1944,
       "Princeton University Press"
};