第8講 関数(2)
第1話 C++の魔法!
C++では変数そのものすなわち箱そのものは渡すことが出来ません。
関数内で宣言した変数のスコープ(適用範囲)は関数内に限定されているからです。
引数で渡していたのは、箱そのものではなくあくまで箱の中身である値です。
ですが、仕事を依頼した関数に、
箱の中身を変更してもらいたいときがあります。
箱を渡していないのに、
箱の中身を変えるなんてこと出来るのでしょうか。
もし、すでに方法がわかった人がいるとすれば、
あなたは慧眼の持ち主です。
箱の中身を参照して(コピーして)渡すしかないにしても、
箱の中身をいじってもらう方法はあります。
値しか渡せなくてもよいのです。
そうです。
箱のアドレスを渡せば、仕事を依頼された関数はその箱の中身を参照したり、
中身を変えたりすることが出来ます。
実際にやってみましょう。
#include<iostream> //入出力のために組み込む
using namespace std; //coutを使えるようにするために必要
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()はそのデータを表示というわけです。