C言語のきほん「構造体(1)」

スポンサーリンク
プログラミング C言語

今回から「構造体」を取り上げる。

学生(名前、身長、体重)を表す構造体を使うプログラムを作ってみよう。

なお、本プログラムは、Windows 11 Home(23H2)上で、 Visual Studio Code(1.90.2)を使用して作成し、gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0でコンパイルしている。

//学生を表す構造体を使うプログラム(宣言・初期化)

#include <stdio.h>

#define NAME_LEN    64

//学生を表す構造体
struct student
{
    char name[NAME_LEN];    //名前
    int height;             //身長
    float weight;           //体重
};

int main(void)
{
    struct student michio = {"Michio",172};

    printf("名前=%s %p\n",michio.name, michio.name);
    printf("身長=%d %p\n",michio.height,&michio.height);
    printf("体重=%.1f   %p\n",michio.weight,&michio.weight);

    return 0;

}

実行結果

名前=Michio 0x7ffe0445b420
身長=172 0x7ffe0445b460
体重=0.0   0x7ffe0445b464

構造体(structure)
structで始まって、構造体タグ(structure tag)と呼ばれる名前(student)の後ろに、本体となる{ }が続き、セミコロン;で終わる形式である。
本体の{ }の中で宣言されているnameとheightとweightは、メンバ(member)と呼ばれる構造体の構成要素である。

name ・・・char型の名前、height・・・int型の身長、weight・・・float型の体重

メンバの初期化
構造体オブジェクトの宣言時に与える初期化子の形式は、配列用の初期化子と似ている。
各メンバに与える初期化子をコンマ,で区切って並べたものを{ }で囲んだ形式である。

なお、{ }内に初期化子が与えられていない要素が0で初期化されることも配列と同じである。

メンバのアクセス
構造体オブジェクトの個々のメンバのアクセスに利用するのが、一般にドット演算子と呼ばれる.演算子である。

メンバアドレスの取得
本プログラムでは、メンバの値だけでなく、アドレスも表示している。
身長、体重についてはアドレス演算子&を適用してアドレスを取得している。
名前のmichio.nameにはアドレス演算子&の適用が行われていないのは、nameが配列だからである。

参考)新・解きながら学ぶC言語 第2版 柴田望洋 (監修・著)、 由梨かおる(著)SBクリエイティブ

コメント

タイトルとURLをコピーしました