1999年度のプログラミングIIIの授業は終りました。 この授業のページは参照用の資料として保存しているものです。最新の情報・資料は江上の授業ページで。 |
構造体のポインタ |
構造体変数をポインタを用いて(アドレスによって)アクセス(参照・代入)しよう。
これまで学習してきたポインタの知識と構造体の知識から次のようなプログラムを作成(or 理解)できるだろうか?[Q] このプログラム中で (*ptr).code のように ( ... ) が必要となるのはなぜだろう?
#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 data;
/* ポインタ変数の宣言 */
struct ADR_DATA *ptr;/* ポインタの初期化 */
ptr = &data ;/* 代入 */
(*ptr).code = 35;
strcpy((*ptr).name, "Chiba Keizai");
(*ptr).seibetsu = 0;
strcpy((*ptr).address, "Chiba-ken, Chiba-shi");
strcpy((*ptr).tel, "043255xxxx");/* 表示 */
printf("%d | %s | %d | %s | %s\n", (*ptr).code,
(*ptr).name,
(*ptr).seibetsu,
(*ptr).address,
(*ptr).tel);
}
このプログラムは動作を変えることなく次のように書き換えることができる(テキストでの表記法)
#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 data;
/* ポインタ変数の宣言 */
struct ADR_DATA *ptr;/* ポインタの初期化 */
ptr = &data ;/* 代入 */
ptr->code = 35;
strcpy(ptr->name, "Chiba Keizai");
ptr->seibetsu = 0;
strcpy(ptr->address, "Chiba-ken, Chiba-shi");
strcpy(ptr->tel, "043255xxxx");/* 表示 */
printf("%d | %s | %d | %s | %s\n", ptr->code,
ptr->name,
ptr->seibetsu,
ptr->address,
ptr->tel);
}