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