構造体の代入について説明します。
ある変数を別の変数に代入した場合、内容はコピーされます。
<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へ代入しましたが、きちんとコピーされていますね。
構造体のメンバとして宣言されている配列は代入でコピーが出来るということです。
異なる構造体への代入は「キャストについて」を確認してください。