今回は、構造体配列を関数に渡して操作する例です。
下記プログラムでは、初期化によって値を与えていますが、前回のTips でファイルから構造体配列に読み込む例を紹介しています。併せて見て下さい。
#include <stdio.h> #define NSTARS ((sizeof stars)/(sizeof(shape_t))) //stars配列の要素数を求める typedef struct { // 構造体の宣言 char name[16]; float height; float weight; } shape_t; // 一番身長の高い人の要素番号を返す int whoIsTallest( shape_t s[], int num ) { float max; int n; if( num < 1 ) return -1; n = --num; max = s[num].height; while( --num >= 0 ) { if( max < s[num].height ) { n = num; max = s[num].height; } } return n; } main() { int mt; // 構造体配列の初期化 shape_t stars[] = { { "Brad_Pitt", 183.2, 73.4 } , { "Tom_Cruise", 170.1, 67.2 } , { "Johnny_Depp", 178.2, 70.5 } , { "Will_Smith", 188.0, 78.3 } , { "Bruce_Willis", 184.0, 78.3 } }; // 構造体配列を関数に渡す mt = whoIsTallest( stars, NSTARS ); if( mt != -1 ) printf( "The tallest is %s(%.1fcm)\n", stars[mt].name, stars[mt].height); }<呼び出される関数の形式>
int whoIsTallest( shape_t s[], int num ) 一番身長の高い人の要素番号を返す<呼び出し方>
whoIsTallest( stars, NSTARS ); 渡されるのは構造体配列の先頭アドレス
int whoIsTallest2( shape_t *p, int num )(答えは、次回のC言語の Tips で ・・・)
[ 関連記事 ] 宣言:構造体宣言,
構造体タグ名
構造体配列:読み込み, ソート, ポインタソート
構造体へのポインタ,
リスト構造,
構造体を関数の戻り値に
[ ご案内 ] 構造体の要点を学習できるコース:要点講座 [ 構造体編 ]