第8講 関数(2)
第1話 C言語の魔法!
C言語では変数そのものすなわち箱そのものは渡すことが出来ません。
関数内で宣言した変数のスコープ(適用範囲)は関数内に限定されているからです。
引数で渡していたのは、箱そのものではなくあくまで箱の中身である値です。
ですが、仕事を依頼した関数に、
箱の中身を変更してもらいたいときがあります。
箱を渡していないのに、
箱の中身を変えるなんてこと出来るのでしょうか。
もし、すでに方法がわかった人がいるとすれば、
あなたは慧眼の持ち主です。
箱の中身を参照して(コピーして)渡すしかないにしても、
箱の中身をいじってもらう方法はあります。
値しか渡せなくてもよいのです。
そうです。
箱のアドレスを渡せば、仕事を依頼された関数はその箱の中身を参照したり、
中身を変えたりすることが出来ます。
実際にやってみましょう。
#include<stdio.h>
void f(int *x); //関数f()のプロトタイプ宣言
int main() {
int a, *b;
a = 3;
printf("a=%d\n", a);
b = &a;
f(b); //関数f()に箱aの中身を変えるように依頼
printf("a=%d\n", a);
return(0);
}
void f(int *x) {
*x = 5;
}
実行画面
a=3
a=5
引数名がxとなっていますが、引数名は自由に付けられましたね。
関数f()が受け取ったのは、箱aのアドレスです。
金庫(箱)のありか(住所)を教えて、
その金庫(箱)の中身を変えてもらったのです。
今は変数を渡しましたが、配列を渡して
実行画面が
1 7 4 0 9 4 8 8 2 4
となるプログラムを考えて下さい。
関数(1)では、変数や配列を渡す方法がなかったので、
データ作成とデータ表示を分業することが出来ませんでしたが、
実質渡せるようになって、分業をさせることができます。
関数f()はデータを作成して、関数g()はそのデータを表示というわけです。