第5講 関数(1)
第10話 引き数名が異なっていてもよい理由
第7話コード再掲
#include<stdio.h> //prinf()を使えるようにするためにインクルード
int f(int s, int k, int m); //s:初項 k:交差 m:末項
int main() {
int s, k, m,y;
printf("キーボーから初項、交差、末項を順に入力して下さい。\n");
printf("初項=");
scanf("%d", &s);
printf("交差=");
scanf("%d", &k);
printf("末項=");
scanf("%d", &m);
y=f(s, k, m);
printf("初項%d、交差%d、末項%dの等差数列の和=%d\n", s, k, m, y);
}
int f(int s, int k, int m) {
int i, w = 0;
for (i = s; i <= m; i += k)w += i;
return(w);
}
まず、同じはこの名前ですが、
sとsは別の箱であることはおわかりですよね。
sは社長main()専用の箱です。
それに対して、sは社員f()の専用の箱です。
sという箱は社長室にあり、sという箱は社員が属している部の部屋にあって別の箱です。
箱にマジックで書いた箱の名前がたまたま同じであるだけだと解釈すればよいのです。
そして、sとsも違いましたね。
sは箱そのものですし、sは箱の中に入っている数値です。
もし、scanfでsに5を代入したとすれば、sは5そのものです。
渡しているのは、あくまで箱の中身の値です。
値を受け取るために、社員f()も受け箱として箱sを用意しただけで、
実際に使うときには、箱そのものを使うのではなくて、
箱の中身を使います。
ですから、今の例ではsは5です。
箱なのか箱の中身なのかをちゃんと区別しなければなりません。
引き数名が異なっている理由をはっきり答えましょう。
社員f()が用意するのは、引き渡される値を受け取る私書箱=受け箱にすぎないからです。
その私書箱をどのような名称にしようとそれはf()の自由です。
自分の受け箱をsと呼ぼうが、xと呼ぼうが関係ありません。
値つまり中身を受け取る受け箱にすぎないのですから。
自分の私書箱をどのような名称で呼ぼうが自由ですよね。
自分専用の箱なのですから。
最後、プロトタイプ宣言の名称はどうなのか、
の疑問が残りますが、これもまさにタイプを示しているだけなので、
引き数名は何でも良いのです。
この例では、3つのint型を引数とする関数であることがわかればよいのです。
ですから名称は関係ありません。
さて、以上で関数(1)は終了しますが、
関数についてはまだまだ説明しなければならないことがたくさんありますので、
関数(2)で再び関数に戻ってきます。
第6講では配列、第7講ではポインタを取り上げ、
第8講で関数に戻ります。