- ベストアンサー
異なる戻り値を返す関数の作り方とは?
- 異なる戻り値を返す関数を作る方法について教えてください。
- 特定の条件に応じて異なる値を返す関数を作成する方法を教えてください。
- 返す値が異なる関数を作成する方法を教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
■引数を使用したい構造体ポインタ型にして、その中に値を代入してみては? void Num(struct KOUZOUTAI * kouzoutai) { -~省略~ --case 0: ----kouzoutai->r_into = 0; ----break; --case 1: ----kouzoutai->r_double = 1.0f; ----break; --case 2: --・・・ -~省略~ } main() { --Num(&kouzou); } ■構造体のどの型に値を代入したかどうかは、 ・戻り値にcountを入れる ・引数ポインタに、countを入れる など、色々方法があるかと思います。
その他の回答 (6)
- Tacosan
- ベストアンサー率23% (3656/15482)
#3 のそれぞれを別個の関数にすればいいのでは?
補足
最終手段としてそれを考えていますが、出来るだけ一つにまとめたいのです
- Tacosan
- ベストアンサー率23% (3656/15482)
見落してたんだけど「返り値として」配列を返すことはできません.
補足
配列を返すという点だけだと、戻り値ではなく引数の参照渡しでしたっけ?(Num(int *A)みたいなやつ)それでやれば問題ないですよね?
- Tacosan
- ベストアンサー率23% (3656/15482)
力技で union.
- kmee
- ベストアンサー率55% (1857/3366)
これなら ・構造体Aを送信し、構造体Aの配列を受信 ・構造体Bを送信し、構造体Bを受信(別の値) ・構造体Cを送信し、構造体Cの配列を受信 のループにすればいいだけでは?
補足
送受信する構造体の値は他の関数でも使いますが、訳あって関数にしたいのです。
- kmee
- ベストアンサー率55% (1857/3366)
void *で渡してキャストして、ってできなくはないでしょうけど。 それよりは、そんな設計自体をやり直した方がいいと思います。 どんな理由があって、「異なる型の構造体を返す」機能が必要なのでしょうか?
補足
ネットワークプログラムで 1ループ目は構造体Aを送信し、構造体Aの配列を受信 2ループ目は構造体Bを送信し、構造体Bを受信(別の値) 3ループ目は構造体Cを送信し、構造体Cの配列を受信 4ループ目は1ループ目と同様 5ループ目は2ループ目と同様 以下略 というような感じにして一つの関数に纏めたいのです void *でキャストは思いつきませんでした。
- asuncion
- ベストアンサー率33% (2127/6289)
>実際にはそれぞれ違う構造体を返したい 違う構造体というのは、値が違う構造体でしょうか。 それとも、型が違う構造体でしょうか。
補足
型が違います。 また、構造体の中身も型だけでなく変数の数も違います
お礼
ありがとうございます。 この方法は思いつきませんでした。 この方法でやってみようと思います