C言語入門|関数の動きを変えるための引数

関数を使い始めたばかりのころ、
多くの人がこんな疑問を持ちます。

「同じ処理だけど、
 ちょっとだけ動きを変えたいときって、
 関数を何個も作らないといけないの?」

たとえば、

  • 朝用の挨拶関数
  • 昼用の挨拶関数
  • 夜用の挨拶関数

こんなふうに関数を増やしていくと、
プログラムはあっという間に
似たような関数だらけ になってしまいます。

この問題をスマートに解決してくれるのが、
今回のテーマである 引数 です。

引数とは何か

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

関数は、

  • 呼び出される
  • 決められた処理を実行する

だけでなく、

  • 値を受け取って
  • その値に応じて動きを変える

ことができます。

この「受け取る値」が引数です。

引数を使うと何がうれしいのか

引数を使う最大のメリットは、

1つの関数を、いろいろな場面で使い回せる

という点です。

処理の中身は同じでも、

  • 表示する内容
  • 計算に使う値
  • 条件分岐の基準

を引数で変えれば、
関数の振る舞いを自由に調整できます。

引数を使ったシンプルな例

では、引数を使ったサンプルを見てみましょう。
参考コードとは異なる内容にしています。

プロジェクト名:8-6-1 ソースファイル名: sample8-6-1.c

#include <stdio.h>

void showLevel(int level)
{
    if (level == 1) {
        printf("初級レベルです\n");
    } else if (level == 2) {
        printf("中級レベルです\n");
    } else {
        printf("上級レベルです\n");
    }
}

int main(void)
{
    printf("処理を開始します\n");
    showLevel(1);
    showLevel(2);
    showLevel(3);
    printf("処理が終了しました\n");
    return 0;
}

関数を呼び出す側で何が起きているか

まず、main関数側を見てみましょう。

showLevel(1);
showLevel(2);
showLevel(3);

このカッコの中に書かれている数値が、
関数に渡される引数 です。

  • 1 を渡す
  • 2 を渡す
  • 3 を渡す

というように、
同じ関数を呼び出していても、
渡す値によって結果が変わります。

関数を定義する側で何が起きているか

次に、関数定義を見てみましょう。

void showLevel(int level)

ここでは、

  • int型の変数 level を宣言しています

この level には、

  • 呼び出し元で指定された値

自動的に代入 されます。

つまり、

呼び出し関数内の level
showLevel(1)level は 1
showLevel(2)level は 2
showLevel(3)level は 3

という関係になります。

引数は「関数専用の入口」

引数は、
関数の外と中をつなぐ入口 のような存在です。

  • 外(呼び出す側)から値を渡す
  • 中(関数の中)で受け取って使う

この仕組みによって、

  • 関数は汎用的になる
  • 呼び出し側は必要な情報だけを渡せる

という、
とてもきれいな役割分担が実現します。

引数がない関数との違い

以前学んだ、引数なしの関数は、

hello();

のように、
カッコの中が空でした。

この () は、

何も渡さない

という意味です。

引数を使う場合でも、
使わない場合でも、
カッコそのものは必ず必要になります。

流れをイメージすると

文章だけだと少し抽象的なので、
イメージで整理してみましょう。

  • main関数
    → 数値を渡して関数を呼び出す
  • showLevel関数
    → 渡された数値を受け取って処理を分岐する

このように、

値が関数に流れ込んで、
その値によって動きが変わる

という構造になっています。

まとめ:引数は関数のスイッチ

ここまでの内容を整理しましょう。

項目内容
引数とは関数に渡す値
役割関数の動きを変える
メリット関数を使い回せる
受け取り方関数定義のカッコ内で変数として宣言

引数は、
関数の動きを切り替えるスイッチ のようなものです。

この考え方が身につくと、

  • きれいな関数設計
  • 無駄のないコード
  • 修正しやすいプログラム

が書けるようになっていきます。

次は、
複数の引数を使う場合
型の違いによる引数の扱い
について見ていきましょう 😊