構造体の配列

次の記述は、構造の配列を関数の引数に渡して表示する例です。

#include <stdio.h>
#define MASTERMAX 5	/* master配列の最大要素数 */
#define STRMAX 10	/* 文字列用配列要素数 */
struct data_t {
	char name[STRMAX];
	int  idata;
};

/* 変更入力 */
void change_data(struct data_t *a)	/* struct data_t a[] と仮引数を宣言しても同じ*/
{
	int i = 0;
	for(i=0; i < MASTERMAX; i++){
		printf("%s の変更入力>" , a[i].name);	/* (a+i)->name と表現しても同じ */
		gets(a[i].name);				/* (a+i)->name と表現しても同じ */
		printf("\t%d点の変更入力>" , a[i].idata);	/* (a+i)->idata と表現しても同じ */
		scanf("%d", & a[i].idata);			/* &(a+i)->idata と表現しても同じ */
		fflush(stdin);
	}
}
/* 表示 */
void display_data(struct data_t *a)/* struct data_t a[] と仮引数を宣言しても同じ*/
{
	int i = 0;
	for(i=0; i < MASTERMAX; i++){
		printf("%s 点数:%d\n", a[i].name , a[i].idata);
	}
}
main()
{
	struct data_t master[MASTERMAX] = { { "suzuki" , 60 } , { "yamada" , 85 } } ; 
	change_data(master);/* 変更入力 */
	display_data(master); /* 表示 */
}

実行例

suzuki の変更入力>satou
        60点の変更入力>70
yamada の変更入力>tanaka
        85点の変更入力>75
 の変更入力>sasaki
        0点の変更入力>80
 の変更入力>suzuki
        0点の変更入力>60
 の変更入力>yamada
        0点の変更入力>85
satou 点数:70
tanaka 点数:75
sasaki 点数:80
suzuki 点数:60
yamada 点数:85