このページは、値渡しとアドレス渡しの記事を読んでおくと
理解しやすくなります。
まずはじめに、結論から言ってしまうと、関数の戻り値は常に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++ 参照で複数の戻り値を返す方法