重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

いつもお世話になってます。
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"を確認したところ、正常に値が取得できているのですが、メイン関数では取得できていません。

どうかアドバイスをよろしくお願いします。

A 回答 (5件)

#4です


サンプルに間違い… m(__)m

getdata(&exp.getdata[i].num, &exp.getdata[i].data);
でなく
getdata(&exp.getdata[i].num, exp.getdata[i].data);
にしてください
    • good
    • 0

動かないコードを掲示してアドバイスを求められてもねえ。



とりあえずサンプル
関数の引数で値を戻すには、ポインタにする必要があります。
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になっているはず
 }
}
    • good
    • 0

提示されたソースをそのままコンパイルしたところ、



>int func1(

ここに引数の並びがないことによるエラーが頻発しました。
また、main関数の記述が見あたりません。
さらに、

>if( ans = 0 ){

ansにゼロを「代入」していますが、いいのですか?

というわけで、質問者さんのところで実行できているという
プログラムのもとになっているソースをあますところなく提示してください。
    • good
    • 0
この回答へのお礼

すみません。
こちらの事情でソース全てを公開することができません。
なので、質問したかった箇所のみを抜粋する形になってしまいました。

お礼日時:2010/02/07 19:16

#1です。

 訂正
float の ポインターのポインターを渡すなら  誤り
float の ポインターを渡すなら          正
    • good
    • 0
この回答へのお礼

ありがとうございました。
ポインターを渡したかったので、インデックスを追加したら
上手く処理できました。

お礼日時:2010/02/07 19:18

float の ポインターのポインターを渡してしまっている。


>ans = funcGet( array1, &ex1.getdata[loop].data );
                   ↑
float の ポインターのポインターを渡すなら
  ex1.getdata[loop].data

  & を付けたいなら
  &ex1.getdata[loop].data[0]

とする。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!