今後、「ある関数の戻り値を他の関数の引数にする」ことが、何度か出てくることになると思いますので、先に説明しておきます。
例えば、↓のような2つの関数があったとします。
関数名 Multiply 機 能 渡された2つの整数を乗算した値を戻す 引 数 int型の値2つ 戻り値 int型
int Multiply(int lhs, int rhs) { return lhs * rhs; } |
関数名 ShowValue 機 能 渡された整数を表示する 引 数 int型の値 戻り値 無し
void ShowValue(int value) { printf("%d\n", value); } |
この2つの関数を使って、「2つの値を乗算し結果を表示する」プログラムを書くとこうなります。
<sample program 129-01>
#include <stdio.h> int Multiply(int lhs, int rhs); void ShowValue(int value); int main(void) { int result; result = Multiply(3, 6); ShowValue(result); return 0; } int Multiply(int lhs, int rhs) { return lhs * rhs; } void ShowValue(int value) { printf("%d\n", value); } |
<実行結果 VC++>
18 続行するには何かキーを押してください・・・
main関数の中で、まず、乗算の結果を変数resultに入れ、ShowValue関数にresultを渡すことで結果表示をしています。
これを↓のように書き換えることが出来ます。
<sample program 129-02>
#include <stdio.h> int Multiply(int lhs, int rhs); void ShowValue(int value); int main(void) { ShowValue(Multiply(3, 6)); return 0; } int Multiply(int lhs, int rhs) { return lhs * rhs; } void ShowValue(int value) { printf("%d\n", value); } |
<実行結果 VC++>
18 続行するには何かキーを押してください・・・
Multiply関数の戻り値をそのままShowValue関数に渡す、という書き方です。
少しわかりづらいかもしれませんが、このような書き方をする場合があるのです。
srandという関数を使った時に同じことをやりました。
srand((unsigned int)time(NULL)); |
これは(キャストが入っているので見づらいですが)time関数の戻り値をsrand関数に直接渡しています。
分けて書くと↓のようになります。
time_t timeValue = time(NULL); srand((unsigned int)timeValue); |
time関数の戻り値をtime_t型の変数timeValueに入れ、その値をsrand関数に渡します。
また、戻り値をそのままif文の条件に使うことも多いです。
次の関数があったとします。
関数名 CheckPass 機 能 合格かどうかを調べる 引数pointが80以上で合格、それ以外は不合格 引 数 int型の値 戻り値 int型 合格の際には1を戻し、不合格の際には0を戻す
int CheckPass(int point) { if (point >= 80) { return 1; } else { return 0; } } |
if文などの「条件」は、「0」が成り立たない、「0以外」が成り立つという解釈をします。
それを利用して、↓のように使います。
<sample program 129-03>
#include <stdio.h> int CheckPass(int point); int main(void) { int point; scanf("%d", &point); if (CheckPass(point)) { printf("合格\n"); } else { printf("不合格\n"); } return 0; } int CheckPass(int point) { if (point >= 80) { return 1; } else { return 0; } } |
<実行結果1 VC++>
79 不合格 続行するには何かキーを押してください・・・
<実行結果2 VC++>
80 合格 続行するには何かキーを押してください・・・
CheckPass関数の戻り値が「0」の時は、
if (0) |
となり、成り立ちません。
「1」の時は、
if (1) |
となり、成り立ちます。
このように、関数の戻り値を(一旦変数で受け取ることなく)別の関数の引数やif文の条件に当てはめることがあります。
しかし、やりすぎるとプログラムを分かりづらくするだけですので、気を付けてください。