1999年度のプログラミングIIIの授業は終りました。 この授業のページは参照用の資料として保存しているものです。最新の情報・資料は江上の授業ページで。 |
構造体の効能 |
構造体変数間のデータをコピーする例を考えよう。
以下は構造体変数 data1 から構造体変数 data2 にデータをコピーし画面表示するプログラムである。
構造体変数内にはメンバが存在しているが、これを配列変数の延長として考えてみると、次のようなプログラムが考えられるであろう。
構造体変数のメンバを個別にコピーするプログラムこのプログラムはメンバを個別にコピーしているので煩雑である。「コピーのし忘れ」や「タイプミス」といったプログラムミスも招きやすい。また、構造体のメンバを追加(or 削除)した場合のプログラムの変更も発生することになる。
#include <stdio.h> struct ADR_DATA
{
int code;
char name[20];
char seibetsu;
char address[100];
char tel[12];
} ;void main(void)
{
struct ADR_DATA data1 =
{
35,
"Chiba Keizai",
0,
"Chiba-ken, Chiba-shi",
"043255xxxx"
};
struct ADR_DATA data2;printf("%d | %s | %d | %s | %s\n", data1.code,
data1.name,
data1.seibetsu,
data1.address,
data1.tel);data2.code = data1.code;
strcpy(data2.name, data1.name);
data2.seibetsu = data1.seibetsu;
strcpy(data2.address, data1.address);
strcpy(data2.tel, data1.tel);printf("%d | %s | %d | %s | %s\n", data1.code,
data1.name,
data1.seibetsu,
data1.address,
data1.tel);
}
そこでC言語では次のような表記が可能となっている。1つの代入文で全メンバのコピーが行われる。
構造体変数を一括してコピーするプログラム
#include <stdio.h> struct ADR_DATA
{
int code;
char name[20];
char seibetsu;
char address[100];
char tel[12];
} ;void main(void)
{
struct ADR_DATA data1 =
{
35,
"Chiba Keizai",
0,
"Chiba-ken, Chiba-shi",
"043255xxxx"
};
struct ADR_DATA data2;printf("%d | %s | %d | %s | %s\n", data1.code,
data1.name,
data1.seibetsu,
data1.address,
data1.tel);data2 = data1;
printf("%d | %s | %d | %s | %s\n", data1.code,
data1.name,
data1.seibetsu,
data1.address,
data1.tel);
}