C++ &参照の使い方と特徴

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.参照は、変数のアドレス値の操作(インクリメントなど)ができない点。
  ポインタは可能。