• ベストアンサー

関数の戻り値について

多くのプログラムをつくったわけでは無いので、実際に不便を感じているわけではないのですが、関数の戻り値って1つですよね。 想像するに、2つ以上返してほしいと思うことが多々あるのではないかと思えるのですが、そのような時にはどのように対処するのでしょうか? 私なら、例えば2つの数字を返してほしいとすると、2つを並べた1つの数字を返してもらい、受け取ってから2つに分けるようなことを考えてしますのですが・・・

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.2

はい。実際に不便です。慣れましたが…。 対処法はいくつかります。 (1)参照で値の受け渡し void func(int *a, int *b){...} としておいて、 int x, y; ... func(&x, &y); とする。funcの中で、*a, *bに値を代入してやれば、 呼び出し側のx, yの値が書き変わっているという寸法。 (2)構造体返し struct Data{int a; int b}; としておいて、 struct Data func(void){ struct Data value; ... value.a = x; value.b = y; return valeu; } とします。使う方ではfuncから帰ってきたData構造体の a, bメンバから値を取り出します。 C++ではインスタンスを返す場合もあります。 (3)広域変数の使用 関数の外側で変数を宣言しておいて、(広域変数) extern int a, b; .... void func (void){ ... a = x; b = y; } のようにします。 使う側は、広域変数abを経由して値を得ます。 もっともこれは、どの教科書にも「やめた方がいい」と 書かれている方法です。 (これをやると、バグが出やすくなるのです) あと、C++ではクラスを使った受け渡し法がいくつか あります。

mk1234
質問者

お礼

回答ありがとうございました。 そうですかやっぱり不便なのですね。 なるほど、構造体はこんなメリットもあるのですね。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

通常のCでなら、構造体へのポインタを返すか、構造体をcall by referenceで引数として渡すでしょう。 C++なら、オブジェクト(への参照)を返すという手も。

mk1234
質問者

お礼

回答ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A