次の記述は、構造の配列を関数の引数に渡して表示する例です。
#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