前回「プログラムの部品化ができる関数の仕組み」に引き続き、関数の使い方です。前回は、引数とは関数に渡すデータということを学びましたが、具体的な使い方には触れていませんでした。今回は、引数が付いた関数の使い方について学びます。
引数は、関数の呼び出し元から関数に何か値を渡したいときに使用します。そして、関数は渡された値を元に処理を行います。
引数を使った関数を定義する
関数の構文は、前回学びましたので、実際、引数の付いた関数を定義してみようと思います。
#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
引数を使ってデータを渡す関数の使い方については以上です。
次は、戻り値を使った関数の使い方については、次のページで学びます。