- ベストアンサー
構造体配列ポインタを引数で使うには
いつもお世話になってます。 C言語を使って、構造体配列を引数として使って、サブ関数で取得した値(配列)をメイン関数に渡したいと思っているのですが、受け渡しが上手くできません。 現在以下の様に組んでいます。 /* 構造体宣言 */ typedef struct EXP1 { char sTime[17]; /* 開始日時 */ struct { int num; /* データ数 */ float data[96]; /* データ */ } getdata[5]; } EXP1 ; /* メイン関数 */ int func1( EXP1 ex1; for( loop = 0 ; loop < 5 ; loop++){ ans = funcGet( array1, &ex1.getdata[loop].data ); } if( ans = 0 ){ for( loop = 0 ; ; loop++){ printf("%f",ex1.data[count].pvdata[loop] ); } } } /* サブ関数 */ static int funcGet(int array, float *fvalue) { ans = calcvalu( array, fvalue ); //←float型で値が取得される。 for( i = 0 ; i < 10 ; i++ ) { printf("%f", *(fvalue + i); } return 0; } サブ関数で"fvalue"を確認したところ、正常に値が取得できているのですが、メイン関数では取得できていません。 どうかアドバイスをよろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#4です サンプルに間違い… m(__)m getdata(&exp.getdata[i].num, &exp.getdata[i].data); でなく getdata(&exp.getdata[i].num, exp.getdata[i].data); にしてください
その他の回答 (4)
- phoenix343
- ベストアンサー率15% (296/1946)
動かないコードを掲示してアドバイスを求められてもねえ。 とりあえずサンプル 関数の引数で値を戻すには、ポインタにする必要があります。 C++なら、参照型が使えますけどね、、 /* 構造体宣言 */ typedef struct EXP1 { char sTime[17]; /* 開始日時 */ struct _tagdata { int num; /* データ数 */ float data[96]; /* データ */ } getdata[5]; } EXP1; void getdata(int *num, float *pdata) { if ( NULL == num ) return; if ( NULL == pdata ) return; *num = 3; pdata[0] = 1.0f; pdata[1] = 2.0f; pdata[2] = 3.0f; } void main(void) { int i; EXP1 exp = {0}; for ( i = 0; i < 5; i++ ) { getdata(&exp.getdata[i].num, &exp.getdata[i].data); // exp.getdata[i].numが3になっているはず } }
- asuncion
- ベストアンサー率33% (2127/6289)
提示されたソースをそのままコンパイルしたところ、 >int func1( ここに引数の並びがないことによるエラーが頻発しました。 また、main関数の記述が見あたりません。 さらに、 >if( ans = 0 ){ ansにゼロを「代入」していますが、いいのですか? というわけで、質問者さんのところで実行できているという プログラムのもとになっているソースをあますところなく提示してください。
- shinh
- ベストアンサー率39% (363/926)
#1です。 訂正 float の ポインターのポインターを渡すなら 誤り float の ポインターを渡すなら 正
お礼
ありがとうございました。 ポインターを渡したかったので、インデックスを追加したら 上手く処理できました。
- shinh
- ベストアンサー率39% (363/926)
float の ポインターのポインターを渡してしまっている。 >ans = funcGet( array1, &ex1.getdata[loop].data ); ↑ float の ポインターのポインターを渡すなら ex1.getdata[loop].data & を付けたいなら &ex1.getdata[loop].data[0] とする。
お礼
すみません。 こちらの事情でソース全てを公開することができません。 なので、質問したかった箇所のみを抜粋する形になってしまいました。