
C言語入門|構造体の初期化テクニック:順次指定とメンバ名指定
構造体の定義や変数の生成はできたけど、
「文字列を代入できない問題」で少しモヤっとしましたよね 😅
でも大丈夫。
構造体は「初期化」のタイミングなら、文字列もちゃんと設定できるんです。
ここでは、
- 構造体の初期化とは何か
- 順次指定による初期化
- メンバ名指定による初期化
この3点を、順番にやさしく解説していきます。

なぜ「初期化」だけ特別なの?
まず、ここをしっかり整理しておきましょう。
C言語には、ちょっと特別なルールがあります。
変数の初期化時の代入だけは例外的に許される
このルールのおかげで、
- char 配列への文字列代入
- 構造体メンバへの一括設定
が可能になります。
| 操作 | OK? |
|---|---|
| 宣言後に代入 | ✕ |
| 宣言と同時の初期化 | ○ |
つまり、
「作る瞬間だけは特別」
というわけですね 😊
今回使う構造体の例
今回は別の例として、
「学生(Student)」を表す構造体を使います。
struct STUDENT {
char name[20];
int grade;
int score;
};この構造体は、
| メンバ | 意味 |
|---|---|
| name | 学生の名前 |
| grade | 学年 |
| score | テストの点数 |
を表しています。
構造体の初期化(順次指定)
まずは、いちばん基本的な初期化方法です。
構文(順次指定)
struct タグ名 変数名 = {
メンバ1の初期値,
メンバ2の初期値,
…
};この方法では、
構造体で定義した順番どおりに値を並べる必要があります。
実際のコード例
struct STUDENT taro = {"太郎", 2, 85};これは次の意味になります。
| メンバ | 設定される値 |
|---|---|
| name | "太郎" |
| grade | 2 |
| score | 85 |
✨ 初期化なので、name に文字列を入れても OK です。
順次指定の特徴と注意点
順次指定はシンプルで書きやすい反面、注意点もあります。
| ポイント | 内容 |
|---|---|
| 並び順が重要 | 定義順を間違えるとバグになる。 |
| 可読性 | 値だけを見ると意味が分かりにくい。 |
| メンバ追加に弱い | 構造体変更でコード修正が必要 |
「小規模な構造体」や
「メンバ数が少ない場合」には、とても便利です 😊
構造体の初期化(メンバ名指定)
次は、少しレベルアップした初期化方法です。
構文(メンバ名指定)
struct タグ名 変数名 = {
.メンバ名 = 初期値,
.メンバ名 = 初期値
};この書き方では、
どのメンバに何を設定しているのかが一目で分かるのが特徴です。
実際のコード例
struct STUDENT hanako = {
.name = "花子",
.grade = 3,
.score = 92
};この場合、順番はそれほど重要ではありません。
メンバ名指定のメリット
メンバ名指定には、こんな強みがあります。
| メリット | 内容 |
|---|---|
| 可読性が高い | コードを見ただけで意味が分かる。 |
| 安全 | 順番ミスによるバグを防げる。 |
| 拡張に強い | メンバ追加の影響が少ない。 |
特に、
- メンバ数が多い構造体
- 長期運用するコード
では、メンバ名指定が強くおすすめです 👍
順次指定とメンバ名指定の比較
ここで一度、2つの方法を比べてみましょう。
| 項目 | 順次指定 | メンバ名指定 |
|---|---|---|
| 書きやすさ | ◎ | ○ |
| 可読性 | △ | ◎ |
| 安全性 | △ | ◎ |
| メンテナンス性 | △ | ◎ |
慣れないうちは、メンバ名指定を使う
これが一番安心です 😊
初期化は「変数を生み出す瞬間」だけ
とても大切な点なので、もう一度確認しておきましょう。
taro.name = "太郎"; // ダメこれは初期化ではなく「代入」なので NG です。
一方で、
struct STUDENT taro = {"太郎", 2, 85};これは 初期化 なので OK。
この違いをしっかり意識できると、
構造体の扱いが一気にラクになります 😊
構造体初期化を使いこなすコツ
最後に、実践的な指針をまとめておきます。
- 簡単な構造体 → 順次指定
- 規模が大きい構造体 → メンバ名指定
- 可読性を重視 → メンバ名指定
構造体は「データの設計図」。
初期化は「最初に正しい状態を与える作業」です。
ここを丁寧に書けるようになると、
プログラム全体がぐっと安定しますよ 😊
ここまで理解できていれば、
構造体はもう怖くありません 😊
次は、
「配列 × 構造体」
「構造体を関数に渡す」
といった、さらに実践的な世界へ進めますよ。
