C言語

引数を使ってデータを渡す関数の使い方

前回「プログラムの部品化ができる関数の仕組み」に引き続き、関数の使い方です。前回は、引数とは関数に渡すデータということを学びましたが、具体的な使い方には触れていませんでした。今回は、引数が付いた関数の使い方について学びます。
引数は、関数の呼び出し元から関数に何か値を渡したいときに使用します。そして、関数は渡された値を元に処理を行います。

引数を使った関数を定義する

関数の構文は、前回学びましたので、実際、引数の付いた関数を定義してみようと思います。

#include <stdio.h>

void twice( int );

int main( void )
{
    return 0;
}

void twice( int number )
{
    printf("%d\n", number * 2);
}

10行目以降が関数定義です。
引数は、( )内に記述する必要があります。そして、引数の型と変数名を指定します。また、この変数名のことを仮引数と呼びます。
仮引数に定義した変数名は、関数内で普通の変数として使用可能になります。この仮引数の値は、呼び出し元で指定された値が代入されます。

3行目に関数のプロトタイプ宣言をしています。引数名は省略していますが、記述しても問題ありません。

引数を使った関数を呼び出す

次に、引数付きの関数を呼び出すサンプルプログラムを記述します。

#include <stdio.h>

void twice( int );

int main( void )
{
    int num = 2;

    twice( 4 );
    twice( num );

    return 0;
}

void twice( int number )
{
    printf("%d\n", number * 2);
}

9、10行目で、関数定義したtwiceを呼び出しています。仮引数に渡す値は、呼び出すときに( ) の中に記述します。このとき、関数に渡す引数のことを実引数と呼びます。
9行目では、4を渡しています。10行目のように変数を渡すこともできます。ただ、変数を渡してはいますが、変数に代入されている値が渡されます。このため、numに代入されている 2 が渡されることになります。実引数の変数名と仮引数の変数名が同じでも異なっていても、どちらでも問題ありません。
また、値のみを渡すことを値渡しといいます。

サンプルプログラムの実行順は次のようになります。

  • num変数を 2 で初期化します。
  • twice( 2 )の関数を呼び出します。このとき、twice関数に2が渡されます。
  • twice関数を実行します。numberには、呼び出し時に指定した 4 が代入されます。
  • twice関数のprintf関数を実行し、number * 2 の結果、値の 8 が表示されます。
  • twice関数が終了し、main関数の9行目のtwice関数に戻り、次のtwice関数を呼び出します。このとき、twice関数にnumの値の 2 が渡されます。
  • twice関数を実行します。numberには、呼び出し時に指定した 2 が代入されます。
  • twice関数のprintf関数を実行し、number * 2 の結果、値の 4 が表示されます。
  • twice関数が終了し、main関数の10行目のtwice関数に戻り、次のreturn 0 が実行されてプログラムが終了します。

以上が、引数が付いた関数定義から呼び出し実行するまでの流れでした。

サンプルプログラムの実行結果は、次のようになります。

実行結果

8
4

次は、複数の引数が付いた関数の書き方について学びます。
複数の引数を指定する場合、カンマで区切り引数を指定します。サンプルプログラムを次に示します。

#include <stdio.h>

void sum( int, int );

int main( void )
{
    int num1 = 3;
    int num2 = 5;

    sum( num1, num2 );

    return 0;
}

void sum( int number1, int number2 )
{
    printf("%d\n", number1 + number2);
}

複数の引数を使う場合、それぞれをカンマ( , )で区切って指定します。サンプルプログラムでは、引数の型は両方 int型にしていますが、別のデータ型を混ぜても問題ありません。
実引数と仮引数は、並べられた順番どおりに1対1で対応しています。プロトタイプ宣言も同様に、引数に対応した型を複数記述する必要があります。
引数の数が異なるとコンパイルでエラーとなりますので注意してください。

サンプルプログラムを実行した結果は次のようになります。

実行結果

8

引数を使ってデータを渡す関数の使い方については以上です。

次は、戻り値を使った関数の使い方については、次のページで学びます。

戻り値のある関数の使い方

-C言語