★構造体の代入★


構造体の代入について説明します。

ある変数を別の変数に代入した場合、内容はコピーされます。

<sample program 104-01>

#include <stdio.h>

int main(void)
{
    int a = 3;

    int b;

    b = a;

    printf("a = %d\n", a);

    printf("b = %d\n", b);

    return 0;
}

<実行結果>

a = 3
b = 3
続行するには何かキーを押してください・・・

構造体は複数のメンバ変数を持つことが出来ますが、構造体を代入するとどうなるか試してみます。

<sample program 104-02>

#include <stdio.h>

typedef struct
{
    int a;
    int b;
} Data;

int main(void)
{
    Data data1 = { 2, 3 };

    Data data2;

    data2 = data1;

    printf("a = %d\n", data2.a);

    printf("b = %d\n", data2.b);

    return 0;
}

<実行結果>

a = 2
b = 3
続行するには何かキーを押してください・・・

↑の結果を見ると、構造体を代入することでメンバ変数もコピーされていることが分かりました。


配列の説明の際に、配列は代入できないと書きました。

構造体のメンバとして宣言されている配列はどうでしょうか。

<sample program 104-03>

#include <stdio.h>

typedef struct
{
    char name[10];
    int hp;
    int mp;
} Player;

int main(void)
{
    Player p1 = { "hero", 100, 50 };

    Player p2;

    p2 = p1;

    printf("name = %s\n", p2.name);

    printf("hp = %d\n", p2.hp);

    printf("mp = %d\n", p2.mp);
    
    return 0;
}

<実行結果>

name = hero
hp = 100
mp = 50
続行するには何かキーを押してください・・・

メンバ変数nameは文字列です。

初期値で"hero"という文字列を入れ、p2へ代入しましたが、きちんとコピーされていますね。

構造体のメンバとして宣言されている配列は代入でコピーが出来るということです。


異なる構造体への代入は「キャストについて」を確認してください。


次へ

戻る

目次へ