★関数(基礎4)★


今後、「ある関数の戻り値を他の関数の引数にする」ことが、何度か出てくることになると思いますので、先に説明しておきます。

例えば、↓のような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文の条件に当てはめることがあります。

しかし、やりすぎるとプログラムを分かりづらくするだけですので、気を付けてください。


次へ

戻る

目次へ