Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語における構造体の宣言方法を徹底解説!基本構文から変数定義の3パターンまで

構造体(structure)とは、int型やchar型、float型など異なるデータ型の変数を、ひとつの名前のもとにまとめたデータの集合体です。共通の名前を持つ異種混合(ヘテロジニアス)なデータ項目をグループ化できるため、実世界のオブジェクト(本、社員、学生など)をプログラム上で自然に表現するのに適しています。

構造体の主な特徴

  • 代入演算子(=)を使うことで、異なるデータ型で構成される構造体メンバーの内容すべてを、同じ型の別の構造体変数へ一括コピーできます。

  • 複雑なデータを扱う際に、構造体の中にさらに別の構造体を定義できます。これを「ネストした構造体(入れ子構造)」と呼びます。

  • 関数への引数として、構造体全体・個々のメンバー・構造体のアドレスのいずれも渡すことが可能です。

  • 構造体を指すポインタ(構造体ポインタ)を作成することもできます。

構造体宣言の一般的な形式

構造体の宣言は、以下の形式で行います。

struct tagname{
    datatype member1;
    datatype member2;
    datatype memberN;
};

各要素の意味は次のとおりです。

  • struct … 構造体を定義するためのキーワードです。

  • tagname … 構造体につける名前(タグ名)を指定します。

  • member1、member2 … 構造体を構成するデータ項目(メンバー)です。

たとえば、「本」の情報を管理する構造体は次のように宣言できます。

struct book{
    int pages;
    char author[30];
    float price;
};

この例では、ページ数(int型)、著者名(char型配列)、価格(float型)という異なる型のメンバーを、bookというひとつの構造体にまとめています。

構造体変数の宣言方法(3パターン)

構造体変数の宣言には、主に以下の3つの方法があります。

パターン1:構造体宣言時に変数を同時に定義する

struct book{
    int pages;
    char author[30];
    float price;
}b;

閉じ括弧の後ろに直接変数名 b を記述する方法です。宣言と定義を一度に行えるためコードがコンパクトになります。

パターン2:タグ名を省略して変数を定義する

struct{
    int pages;
    char author[30];
    float price;
}b;

タグ名を付けずに変数を定義する方法です。ただしタグ名がないため、後から同じ構造体型の変数を追加定義できないという制約があります。

パターン3:構造体宣言後に変数を別途定義する

struct book{
    int pages;
    char author[30];
    float price;
};
struct book b;

まず構造体だけを宣言し、必要な箇所で「struct book b;」のように変数を定義する方法です。最も汎用性が高く、実際の開発ではこの形式がよく使われます。

まとめ

構造体を使うことで、異なるデータ型をひとまとめに扱え、プログラムの可読性と保守性が大きく向上します。ネスト構造や関数への受け渡し、構造体ポインタなども組み合わせれば、より複雑なデータ処理にも柔軟に対応できるでしょう。まずは基本的な宣言と変数定義の3パターンをしっかり押さえておきましょう。

  1. 構造体の概念で理解するC言語のビットフィールド|定義方法と範囲の計算を徹底解説

    ビットフィールドとはビットフィールドとは、変数が占めるメモリのサイズをビット単位で指定できるC言語の機能です。通常は構造体(struct)の中で定義されます。ビットフィールドの基本:1バイト=8ビット記述例struct info { int x : 2; };この例では、メンバxは2ビットを占有します。ビットフィールド使用時の注意点ビットフィールドの範囲外の値を代入することはできません(その場合の動作は保証されません)。sizeof演算子やアドレス演算子(&)をビットフィールドに適用できないため、scanf関数で値を入力することもできません。ビットフィールドに指定できるデータ型

  2. C言語で学ぶトップダウン設計と構造チャートの基本

    関数(function)とは、明確に定義された特定のタスクを実行する、自己完結型のコードブロックのことです。 C言語において関数を使うことには、以下のようなメリットがあります。 コードの再利用性が高まる プログラム全体の長さを短縮できる 不具合のある関数を特定・発見しやすい トップダウン式のモジュールプログラミングを促進できる トップダウン設計と構造チャートとは トップダウン設計とは、複雑な問題をより小さな「部分問題」へと分割しながら解決していく問題解決手法のことです。 一方、構造チャート(ストラクチャーチャート)は、一つの問題を構成する各部分問題同士の関係性を視覚的に示すためのドキュメ