コース一覧
    C言語基礎 ポインタ・構造体・ファイル
    構造体

    C言語基礎 ポインタ・構造体・ファイル

    C言語のポインタ、構造体、ファイル操作を学び、データを扱う基礎を固めるコースです。

    1
    ポインタの入口
    01. アドレスとは15分
    02. ポインタの&と*15分
    03. scanfの&の正体15分
    04. 関数で値を書き換える15分
    05. 配列を関数に渡す15分
    06. つくる 入力処理の関数化15分
    07. 第7章クイズ10分
    2
    構造体とファイル
    01. 構造体15分
    02. メンバの読み書き15分
    03. 構造体配列15分
    04. 構造体と関数15分
    05. ファイルに書き込む15分
    06. ファイルを読み込む15分
    07. ファイルの失敗に備える15分
    08. つくる 保存機能15分
    09. 第8章クイズ10分
    3
    総合制作
    01. メニュー統合15分
    02. 自由拡張15分
    03. 完成と次のステップ10分

    構造体

    名前と点数がバラバラだった問題

    前章まで、成績管理CLI は学生の名前を char names[3][32]、点数を int scores[3] という 別々の配列 で持っていました。「names[1] の人の点数は scores[1]」という対応は、私たちが頭の中で覚えているだけです。

    この持ち方には弱点があります。名前だけを並べ替えたら点数が付いてきません。学生を 1 人削除するときも、両方の配列を同じように操作しないと対応がずれます。ずれてもコンパイルは通るので、間違った成績表が出るまで気づけません。

    本当に欲しいのは「名前と点数がくっついた 1 個のかたまり」です。C ではこれを 構造体 といいます。

    新しい型を自分で作る

    構造体は struct で定義します。

    c

    struct Student {
        char name[32];
        int score;
    };

    これは「Student という設計図を作った」という宣言で、まだ変数は 1 つもできていません。int や double と同じ仲間の 型 が 1 種類増えた、と考えてください。中に並べた name と score を メンバ と呼びます。

    注意点が 1 つあります。閉じカッコのうしろの セミコロンが必須 です。関数の定義にはセミコロンが要らないので、ここは混同しやすく、忘れると次の行から見当違いのエラーが並びます。

    定義は main より前、#include の下あたりに書きます。main の中で使うより先に、コンパイラが設計図を知っている必要があるからです。

    変数を作って初期値を入れる

    設計図ができたら、そこから変数を作れます。型の名前は Student ではなく struct Student で、2 語セットです。

    c

    struct Student first = {"田中", 82};

    波カッコの中身は、構造体を定義したときの 並び順 に対応します。1 つ目の "田中" が name、2 つ目の 82 が score に入ります。順番を入れ替えると型が合わずエラーになります。

    こうして作った変数は、名前と点数がひとかたまりです。first を関数に渡せば名前も点数も一緒に届きますし、2 人目が欲しければ struct Student second; ともう 1 個作るだけで、配列を 2 本増やす必要はありません。

    メンバの中身を取り出すには first.score のようにドットでつなぎます。次回きちんと扱うので、まずは定義して表示するところまでやってみましょう。

    要件

    1. struct Student を name(char 32個の配列) と score(int) の2つのメンバで定義する
    2. 田中 82点 と 佐藤 90点 の変数を初期値付きで作る
    3. 「田中 82点」の形で2行表示する
    4. 最後に「2人の合計は172点です」の形で合計を表示する

    ヒント

    構造体の定義の閉じカッコのうしろにはセミコロンが要ります

    変数を作るときの型名は Student ではなく struct Student です

    メンバの値は first.score のようにドットでつないで取り出します

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • メンバの読み書き

      ドットでメンバを読み書きできるようになります。

    • 構造体配列

      学生一覧を1本の配列で持てるようになります。

    • 構造体と関数

      構造体を引数に取る関数を書けるようになります。

    • ファイルに書き込む

      計算した成績をファイルに保存できるようになります。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 配列サイズ固定の同型データの集まり
    • コンパイルソースをバイトコードへ変換する処理
    • 設計何をどう作るかを決める前工程
    • 変数データに名前をつけて参照する仕組み
    • 関数処理に名前を付けて再利用できる単位
    • セット重複を持たない順序なし集合
    main.c
    エディタを読み込んでいます

    メモ

    構造体

    ⌘S で保存