第28回 | 同じレシピなのに、味が変わる?|C言語の関数の引数をやさしく解説|データと関数をつなぐ仕組み

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。

データと関数をつなぐ | 同じレシピなのに、味が変わる?|C言語の関数の引数をやさしく解説

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

目次

はじめに

前回は、関数を「名前で呼び出せるレシピカード」として見ました。

今回は、そのレシピカードに値を渡す話です。

同じミックスジュースのレシピでも、バナナを多めにしたり、みかんを多めにしたりすると、できあがるバランスは変わります。

C言語の関数でも、同じ関数に違う値を渡すことで、処理の内容を少し変えられます。

同じレシピを、少しだけ変えて使いたい

ミックスジュースの材料が、次の4つだとします。

  • バナナ
  • みかんの缶詰
  • 桃の缶詰
  • ミルク

毎回、作り方そのものは同じです。
でも、注文によって材料の量を変えたいことがあります。

  • バナナ多め
  • みかん多め
  • 桃多め
  • 通常のバランス

このようなとき、注文ごとに別々の関数を作ると、似たコードが増えてしまいます。

そこで使うのが、引数です。

引数は、関数に渡す値

引数とは、関数を呼び出すときに渡す値のことです。

make_mix_juice(3, 1, 1, 1);

この例では、かっこの中の 3111 が引数です。

ここでは、それぞれの数字を材料の量として使います。

  • 1つ目の値は、バナナの量
  • 2つ目の値は、みかんの缶詰の量
  • 3つ目の値は、桃の缶詰の量
  • 4つ目の値は、ミルクの量

つまり、材料そのものを渡しているのではなく、材料の量を表す整数値を渡しています。

関数側で、値を受け取る

渡された値を受け取る関数は、次のように書きます。

void make_mix_juice(int banana_amount, int orange_amount, int peach_amount, int milk_amount) {
    printf("ミックスジュースを作ります\n");
    printf("バナナ:%d\n", banana_amount);
    printf("みかんの缶詰:%d\n", orange_amount);
    printf("桃の缶詰:%d\n", peach_amount);
    printf("ミルク:%d\n", milk_amount);
    printf("\n");
}

banana_amountorange_amountpeach_amountmilk_amount は、関数が受け取る値を入れておくための名前です。

たとえば、次のように呼び出したとします。

make_mix_juice(3, 1, 1, 1);

すると、関数の中では次のように値が入ります。

  • banana_amount には 3
  • orange_amount には 1
  • peach_amount には 1
  • milk_amount には 1

この対応は、順番で決まります。
1つ目に渡した値は1つ目の受け取り口へ、2つ目に渡した値は2つ目の受け取り口へ入ります。

完成したコード

全体のコードで確認してみます。

#include <stdio.h>

void make_mix_juice(int banana_amount, int orange_amount, int peach_amount, int milk_amount) {
    printf("ミックスジュースを作ります\n");
    printf("バナナ:%d\n", banana_amount);
    printf("みかんの缶詰:%d\n", orange_amount);
    printf("桃の缶詰:%d\n", peach_amount);
    printf("ミルク:%d\n", milk_amount);
    printf("\n");
}

int main(void) {
    /* バナナ多め */
    make_mix_juice(3, 1, 1, 1);

    /* みかんの缶詰多め */
    make_mix_juice(1, 3, 1, 1);

    /* 桃の缶詰多め */
    make_mix_juice(1, 1, 3, 1);

    /* 通常のバランス */
    make_mix_juice(1, 1, 1, 1);

    return 0;
}

make_mix_juice という関数は同じです。
変えているのは、呼び出すときに渡している数字だけです。

実行結果

ミックスジュースを作ります
バナナ:3
みかんの缶詰:1
桃の缶詰:1
ミルク:1

ミックスジュースを作ります
バナナ:1
みかんの缶詰:3
桃の缶詰:1
ミルク:1

ミックスジュースを作ります
バナナ:1
みかんの缶詰:1
桃の缶詰:3
ミルク:1

ミックスジュースを作ります
バナナ:1
みかんの缶詰:1
桃の缶詰:1
ミルク:1

プログラム上では、表示される材料の量が変わっています。

レシピにたとえるなら、同じ作り方のまま、材料のバランスだけを変えている状態です。

引数を使うと、関数を使い回せる

引数を使うと、同じ関数をいろいろな条件で使えます。

  • 関数の中身を何度も書かなくてよい
  • 呼び出すときの値だけを変えればよい
  • 同じ処理を、違う条件で使い回せる

今回の例では、材料の量を表す数字を引数として渡しました。

この考え方は、人数、点数、金額、回数など、いろいろな値に応用できます。

まとめ

引数は、関数に渡す値です。

  • 関数を呼び出すとき、かっこの中に値を書ける
  • 渡した値は、関数側の変数で受け取る
  • 値は、書いた順番どおりに対応する
  • 引数を変えると、同じ関数でも処理結果を変えられる

同じレシピカードでも、渡す分量を変えれば違うバランスで作れます。

C言語の関数も同じように、引数を受け取ることで、同じ処理を少しずつ違う形で使えるようになります。

次は、関数が処理した結果を呼び出し元へ返す、戻り値について見ていきます。

次回予告

次回は、関数の中で作った結果を、呼び出し元で受け取る「戻り値」を見ていきます。
処理を任せるだけでなく、その結果を次の計算につなげる感覚を身につけましょう。

復習してみよう

復習したい方は、こちらもあわせてご覧ください。

用途ごとに選ぶ C言語のおすすめ本

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

この記事を書いた人

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

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

Created by UNIX Cafe

目次