データと関数をつなぐ |作った結果を「受け取る」話|C言語の戻り値をやさしく理解する

当サイトでは、コンテンツの一部に広告を掲載しています。
作った結果を「受け取る」話|C言語の戻り値をやさしく理解する

はじめてのC言語 | 第28回

目次

はじめに

前回は、関数に値を渡す引数を学びました。

今回は、関数が処理した結果を、呼び出した側へ返すしくみを見ていきます。

この「関数から返ってくる値」を、C言語では戻り値と呼びます。

関数の中で計算した値は、そのままでは使えない

まずは、値段を計算する関数を考えてみます。

void calculate_drink_price(void) {
    int price = 500;
    price = price + 100;
}

この関数の中では、price600 が入ります。

ただし、この price は関数の中で作られたローカル変数です。
関数が終わると、その変数は使えなくなります。

つまり、関数の中で計算しただけでは、呼び出し元でその値を使えません。

呼び出し元で使いたい値は、関数から返す必要があります。

return で値を返す

関数から値を返すには、return を使います。

int calculate_drink_price(void) {
    int price = 500;
    price = price + 100;
    return price;
}

ここで大切なのは、次の1行です。

return price;

これは、price の値を呼び出し元へ返す、という意味です。

また、return が実行されると、その関数の処理はそこで終了します。
return の後ろに同じ関数内の処理があっても、そこには進みません。

戻り値の型を書く

関数名の前にある int は、この関数が int 型の値を返すことを表しています。

int calculate_drink_price(void)

今回の関数は、ドリンクの値段を整数で返します。
だから、戻り値の型は int です。

前回使った void は「値を返さない」という意味でした。
戻り値を返したい場合は、intdouble など、返す値に合った型を書きます。

返された値を受け取る

関数が値を返しても、呼び出し元で使いたい場合は、その値を受け取る必要があります。

int price = calculate_drink_price();

この1行では、次のことが起きています。

  • calculate_drink_price() を呼び出す
  • 関数が 600 を返す
  • 返ってきた値を price に入れる

このように、戻り値は変数に入れることで、あとから使えるようになります。

戻り値を受け取らずに関数を呼ぶことも、C言語としては可能です。

calculate_drink_price();

ただし、この書き方では、返ってきた値を使っていません。
値段を表示したり、条件判断に使ったりしたい場合は、変数で受け取る必要があります。

全体のコード

全体をつなげると、次のようになります。

#include <stdio.h>

int calculate_drink_price(void) {
    int price = 500;
    price = price + 100;
    return price;
}

int main(void) {
    int price = calculate_drink_price();

    printf("ドリンクの値段は %d 円です\n", price);

    return 0;
}

実行すると、次のように表示されます。

ドリンクの値段は 600 円です

calculate_drink_price が値段を計算し、その結果を main が受け取って表示しています。

戻り値は、次の処理につなげられる

戻り値を変数に入れると、その値を次の処理に使えます。

int price = calculate_drink_price();

if (price > 500) {
    printf("少し高めのドリンクです\n");
}

このように、戻り値を使えば、計算結果をもとに表示を変えたり、条件判断をしたりできます。

関数の中で終わっていた計算結果を、次の処理へつなげられるようになるのが、戻り値の大きな役割です。

条件判断まで含めたコード

#include <stdio.h>

int calculate_drink_price(void) {
    int price = 500;
    price = price + 100;
    return price;
}

int main(void) {
    int price = calculate_drink_price();

    if (price > 500) {
        printf("少し高めのドリンクです\n");
    }

    printf("ドリンクの値段は %d 円です\n", price);

    return 0;
}

実行すると、次のようになります。

少し高めのドリンクです
ドリンクの値段は 600 円です

関数は「約束」になる

戻り値の型が分かると、その関数が何を返すのかを読み取りやすくなります。

  • int を返すなら、整数が返ってくる
  • double を返すなら、小数を扱う値が返ってくる
  • void なら、値は返ってこない

関数の戻り値の型は、「この関数を呼ぶと、どんな値が返ってくるのか」という約束になります。

まとめ

戻り値は、関数から呼び出し元へ返される値です。

  • return で値を返せる
  • return が実行されると、その関数は終了する
  • 関数名の前に、戻り値の型を書く
  • 返ってきた値を使いたいときは、変数で受け取る
  • 受け取った戻り値は、表示や条件判断に使える

関数の中で計算した結果を外に出せるようになると、処理を小さな部品に分けやすくなります。

次は、引数と戻り値を組み合わせて、より使いやすい関数を作っていきます。

次回予告

次回は、変数・関数・計算の考え方を使って、人数に合わせて材料を計算する小さなプログラムを作ります。
学んだ部品が、ひとつの実用的なレシピとして組み上がっていく様子を見ていきましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次