苦しんで覚えるC言語

関数に数値を渡す


第1項:引数を持つ関数

前項で、sum関数を作り、1~100の合計の計算を部品化しました。
しかし、1~100の合計しか計算できないのでは不便です。
もっと自由な範囲の合計の計算ができたほうが便利です。

このような時のために、関数に情報(数値)を渡すことができます。
そのための仕組みが、引数と呼ばれる仕組みです。
引数を使うと、関数に数値を渡すことができます。
引数
関数に渡す情報の総称
引数は、関数の()の中に書いて指定する必要があります。
前項で作成したsum関数では、引数はvoidとなっていました。
このvoidは、引数を使わない時に指定します。

引数を使う場合、()の中には、渡された数値を格納する変数を宣言します。
sum関数でint型の変数maxに数値を格納する場合、次の通りにします。

int sum(int max);
このように、使用する変数を指定する部分を仮引数と呼びます。
仮引数
関数宣言に書かれた引数の型と名前のこと。
関数を変更した場合、プロトタイプ宣言も同様にする必要がありますが、
プロトタイプ宣言では変数を省略して型だけでも構いません。
次のプログラムは、sum関数を引数を受け取るように改造した例です。

#include <stdio.h>

int sum(int);	/* プロトタイプ宣言 */

int main(void)
{
	return 0;
}

int sum(int max)
{
	printf("%d\n",(1 + max) * max / 2);
	return 0;
}
引数に指定した変数は、その関数内で普通の変数と同じように使用できます。

目次に戻る

第2項:関数に数値を渡す

引数を持つ関数を呼び出す場合、数値を渡す必要があります。
それには、呼び出す時に、()の中に数値を書き込みます。
次のプログラムは、sum関数に50という数値を渡す例です。
なお、関数に渡す数値のことを、実引数と呼ぶことがあります。
実引数
関数を呼び出す時に渡す数値のこと。

#include <stdio.h>

int sum(int);	/* プロトタイプ宣言 */

int main(void)
{
	sum(50);	/* 50を渡している */
	return 0;
}

int sum(int max)
{
	printf("%d\n",(1 + max) * max / 2);
	return 0;
}
このプログラムの実行結果は次のようになります。

1275
これは、sum関数を呼び出す時に指定した50という数値が、
sum関数の仮引数である変数maxに代入されているのです。
当然、sum関数を呼び出す時の数値を変更すると、表示結果も変わります。

引数つきの関数を呼び出す場合、必ず数値を渡さなくてはいけません。
例えば、次のようにしてsum関数を呼び出すとエラーとなります。

sum();

目次に戻る

第3項:複数の引数

引数は、何もひとつだけに限定されているわけではありません。
必要とあれば、好きなだけの引数を持つ関数を作ることができます。

sum関数を、min~maxの合計値を求める関数にするには、
引数を2つに増やし、中身の式を入れ替えることで実現できます。
次の関数は、min~maxの合計を求めるよう改造した例です。

int sum(int min,int max)
{
	printf("%d\n",(min + max) * (max - min + 1) / 2);
	return 0;
}
複数の引数を使う場合、それぞれを,で区切って指定します。
ここでは両方にint型を使っていますが、別の型を混ぜても問題ありません。

この関数を呼び出す場合にも、数値を,で区切って指定します。
実引数と仮引数は、並べられている順番どおりに1対1で対応します。
次のプログラムは、改良したsum関数を呼び出す例です。

#include <stdio.h>

int sum(int,int);	/* プロトタイプ宣言 */

int main(void)
{
	sum(50,100);
	return 0;
}

int sum(int min,int max)
{
	printf("%d\n",(min + max) * (max - min + 1) / 2);
	return 0;
}
このプログラムの実行結果は次のようになります。

3825
なお、プロトタイプ宣言も修正しています。
また、複数の引数を持つ関数では、全ての引数に数値を渡さないと呼び出せません。

目次に戻る