C言語では、引数をポインタにすることで、変数のアドレスをもらい、関数内部からそのアドレスの変数にアクセスして、値を書き換えることができた。
ただ、アクセスするときはポインタ演算子'*'が必要だった・・・。
void func(int *a){ *a = 10; /* 呼び出し元で指定したアドレスが指す変数の値が10になる. */ }
C++では、引数を参照にすることで、引数名そのままで呼び出し元の変数にアクセスできる・・・。
void func(int &a){ a = 10; /* 呼び出し元で指定した変数の値が10になる. */ }
参照は、宣言で'&'を付けて
<型> &<変数名や引数名>
独立参照ということで、変数としても使えるが、まあ普通は関数の引数に使うのが多いだろう・・・。
これを使って、2つの変数の値を交換するswap関数を作る・・・。
と関数swap()をプロトタイプ宣言・・・。
定義では、
ポインタ演算子'*'を全く使わずに、値の交換作業ができている・・・。
swap()の呼び出しも、
アドレス演算子'&'はいらない・・・。変数名を渡すだけ・・・。
swap()前後の値を出力して、交換できてるか確認・・・。
]$ ./reference a: 10 b: 20 swap before: a = 10, b = 20 swap after: a = 20, b = 10 $
できてる・・・。