本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。
第28回 | 同じレシピなのに、味が変わる?|C言語の関数の引数をやさしく解説|データと関数をつなぐ仕組み

はじめてのC言語 | 第28回
はじめに
前回は、関数を「名前で呼び出せるレシピカード」として見ました。
今回は、そのレシピカードに値を渡す話です。
同じミックスジュースのレシピでも、バナナを多めにしたり、みかんを多めにしたりすると、できあがるバランスは変わります。
C言語の関数でも、同じ関数に違う値を渡すことで、処理の内容を少し変えられます。
同じレシピを、少しだけ変えて使いたい
ミックスジュースの材料が、次の4つだとします。
- バナナ
- みかんの缶詰
- 桃の缶詰
- ミルク
毎回、作り方そのものは同じです。
でも、注文によって材料の量を変えたいことがあります。
- バナナ多め
- みかん多め
- 桃多め
- 通常のバランス
このようなとき、注文ごとに別々の関数を作ると、似たコードが増えてしまいます。
そこで使うのが、引数です。
引数は、関数に渡す値
引数とは、関数を呼び出すときに渡す値のことです。
make_mix_juice(3, 1, 1, 1);この例では、かっこの中の 3、1、1、1 が引数です。
ここでは、それぞれの数字を材料の量として使います。
- 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_amount、orange_amount、peach_amount、milk_amount は、関数が受け取る値を入れておくための名前です。
たとえば、次のように呼び出したとします。
make_mix_juice(3, 1, 1, 1);すると、関数の中では次のように値が入ります。
banana_amountには3orange_amountには1peach_amountには1milk_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言語の関数も同じように、引数を受け取ることで、同じ処理を少しずつ違う形で使えるようになります。
次は、関数が処理した結果を呼び出し元へ返す、戻り値について見ていきます。
次回予告
次回は、関数の中で作った結果を、呼び出し元で受け取る「戻り値」を見ていきます。
処理を任せるだけでなく、その結果を次の計算につなげる感覚を身につけましょう。
復習してみよう
復習したい方は、こちらもあわせてご覧ください。













