#include #include #include /* 人の名前と誕生日を格納する構造体の宣言 */ typedef struct { char name[128]; int month; int day; } HUMAN; /* 関数の仮引数に氏名と誕生日(月, 日)を受け取り, * 新規に構造体HUMAN型のメモリ領域を動的に確保して, * その構造体のメンバに氏名と誕生日を格納し, * その構造体のポインタを返す関数 */ HUMAN *new_human(char *name, int month, int day) { HUMAN *new; /* 動的にHUMAN型変数1つのメモリ領域を確保する */ new =(HUMAN*)malloc(sizeof(HUMAN)*1); /* 動的なメモリ確保に失敗した場合の処理*/ if( new == NULL ) { fprintf(stderr,"構造体のメモリ確保失敗\n"); exit(1); } /* ポインタnewの指すHUMAN型変数のメンバーに仮引数の値を代入 */ new={*name,month,day}; return new; } /* HUMAN型変数hの氏名と誕生日を表示 */ void print_human(HUMAN h) { printf("%s (誕生日:%02d月%02d日)\n",h.name,h.month,h.day); } int main(void) { int i; HUMAN *member[3]; member[0] = new_human("Ayano Omoto", 9, 20); member[1] = new_human("Yuka Kashino", 12,23); member[2] = new_human("Ayaka Nishiwaki", 2, 15); for( i=0; i<3; i++ ) { print_human(&member[i]); } return 0; }