今後、「ある関数の戻り値を他の関数の引数にする」ことが、何度か出てくることになると思いますので、先に説明しておきます。
例えば、↓のような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文の条件に当てはめることがあります。
しかし、やりすぎるとプログラムを分かりづらくするだけですので、気を付けてください。