関数を呼んだとき,引数に与えた変数に値を返したい場合には, C言語ではポインタを使うのが一般的である.例えばこんな感じだ.
C++では,もちろんポインタを使った方法も使えるが,参照を使う 方法も使える.参照は,Pascalでの名前渡し(call by name)に相当する. こんな感じだ.void swap(int *x, int *y) { int z; z = *x; *x = *y; *y = z; } main() { int a,b; .... swap(&a,&b); .... }
内部での実現方法は,ポインタを使った方法とまったく同じだ. しかし,記述の上で,かなり簡潔に書けるようになる.void swap(int &x, int &y) { int z; z = x; x = y; y = z; } main() { int a,b; .... swap(a,b); .... }
参照は,引数に使うだけでなく,いろいろなところに使える. もちろん普通の変数としても使えるが,面白いのは関数の返値 として参照を使う場合である.次の例を見てみよう.
この例では,static変数の参照を返している.すなわち static変数へのポインタを返しているのと等価だから, 次のようなことができる.int& hoge(int i) { static int x[10]; return x[i]; }
つまり,関数を見かけ上配列のように使うことができるわけだ. もちろん,代入の右辺や普通の計算式に使うこともできる.main() { .... hoge(2) = 130; .... }