
いつもお世話になってます。
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"を確認したところ、正常に値が取得できているのですが、メイン関数では取得できていません。
どうかアドバイスをよろしくお願いします。
No.5ベストアンサー
- 回答日時:
#4です
サンプルに間違い… m(__)m
getdata(&exp.getdata[i].num, &exp.getdata[i].data);
でなく
getdata(&exp.getdata[i].num, exp.getdata[i].data);
にしてください
No.4
- 回答日時:
動かないコードを掲示してアドバイスを求められてもねえ。
とりあえずサンプル
関数の引数で値を戻すには、ポインタにする必要があります。
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になっているはず
}
}
No.3
- 回答日時:
提示されたソースをそのままコンパイルしたところ、
>int func1(
ここに引数の並びがないことによるエラーが頻発しました。
また、main関数の記述が見あたりません。
さらに、
>if( ans = 0 ){
ansにゼロを「代入」していますが、いいのですか?
というわけで、質問者さんのところで実行できているという
プログラムのもとになっているソースをあますところなく提示してください。
すみません。
こちらの事情でソース全てを公開することができません。
なので、質問したかった箇所のみを抜粋する形になってしまいました。
No.1
- 回答日時:
float の ポインターのポインターを渡してしまっている。
>ans = funcGet( array1, &ex1.getdata[loop].data );
↑
float の ポインターのポインターを渡すなら
ex1.getdata[loop].data
& を付けたいなら
&ex1.getdata[loop].data[0]
とする。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語での引数の省略方法
-
エラー 添字が付けられた値が、...
-
「指定されたキャストは有効で...
-
【C++】関数ポインタの使い方
-
ラップ関数とはどんなものですか?
-
C言語 エラーの原因がわからな...
-
CStringの配列要素を関数で受け...
-
最早開始時間と最遅完了時刻を...
-
「{ } で囲むだけ」は正しい?
-
足して100になるような乱数のア...
-
double型の値を、一桁ずつint型...
-
C言語の課題です
-
次のプログラムを教えてくださ...
-
(int *)の意味
-
線形補間 2次元テーブル C言語...
-
C言語 配列と関数の練習問題
-
ファイルに含まれるアルファベ...
-
C言語/ランダムbeepのプログラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数桁10進数の*桁目だけを抽出...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
(int *)の意味
-
ColorをRGBで指定する方法
-
未解決の外部シンボル _printf...
-
構造体の勉強中です 合計点の高...
-
商と剰余を同時に求める(C言語)
-
C言語で分からないところがあり...
-
式は定数値が必要です」という...
-
C言語での奇数の和
-
std::set<int> で、ある値が何...
-
課題でつまってます・・・
-
int16_t の _t は何?
-
比較回数と交換回数表示について
おすすめ情報