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