C言語には、ポインタと言う機能がありましたが、
これと似た機能が参照です。
void main(void) {
int a;
int *ip; // ポインタ型変数
int &refp = a; // 参照型変数宣言
// 変数refpを変数aの参照とする。
ip = &a; // 変数aのアドレスをipに代入
// 通常のポインタでの代入
*ip = 100; // 変数aの値=100になる
// 変数refpを使って変数aの値にアクセスできる
refp = 500; // 変数aの値=500になる
}
この例では、変数aの値を、ポインタと参照を使って変更しています。
参照型変数は、
宣言時に他の型の参照を初期値として設定しなければなりません。
int a;
int *ip; // ポインタ型変数
int &refp = a; // 参照型変数宣言
// 変数refpを変数aの参照とする。
この場合、変数refpは、変数aの参照となります。
そして、変数refpは変数aと同じモノとして扱う事ができます。
つまり、「変数refpは、変数aの別名である。」と解釈する事ができます。
変数refpを使って、変数aの値にアクセスできます。
ポインタ型変数のように
*(アスタリスク)や&(アンパサンド)記号を使わずに
扱う事ができるため、大変便利な機能です。
ただ、ポインタの扱いに慣れていると、
逆に違和感を覚えるかもしれません。
参照機能の内部では、ポインタ処理が行われています。
記述面では便利ですが、
機能面としては、ポインタの方が勝ります。
1.参照は、変数宣言時に初期化する必要がある点。
ポインタは、変数宣言時に初期化する必要がない。
2.参照変数を初期化すると、その後は、別の参照として使う事ができない点。
ポインタは、別のアドレスを代入して使用する事ができる。
3.参照は、変数のアドレス値の操作(インクリメントなど)ができない点。
ポインタは可能。