C言語 複数の戻り値を返す方法 return

このページは、値渡しとアドレス渡しの記事を読んでおくと
理解しやすくなります。


まずはじめに、結論から言ってしまうと、関数の戻り値は常に1つです。
これはC言語の仕様上、変更できません。

しかし、1つの関数で複数の処理結果が欲しい場合があります。
そう言う場合には、どこかのアドレスに
値を格納してもらうようにする方法があります。

#include <stdio.h>

void keisan(int a, int b, int* p1, int* p2);

void main(void) {
      int tasizan = 0;
      int hikizan = 0;

      keisan(20, 5, &tasizan, &hikizan);

      printf("足し算=%d\n", tasizan);
      printf("引き算=%d\n", hikizan);

}

void keisan(int a, int b, int* p1, int* p2) {
      *p1 = a + b;
      *p2 = a - b;
}

この例は、keisan関数で足し算と引き算をしてもらい、
表示するプログラムです。

結果は以下のようになります。

足し算=25
引き算=15

keisan関数では、第3引数と第4引数に
足し算と引き算の計算結果を
それぞれ格納してもらう変数のアドレスを渡します。

そして、関数内でそれぞれ計算し、
アドレスを使って足し算と引き算の計算結果を格納しています。

これで、1つの関数で複数の結果を得る事ができました。

■参考記事
配列を返す方法 文字列を返す方法
C++ 参照で複数の戻り値を返す方法