第12章 参照
12.1 参照の役目
省略
 
12.2 参照の宣言
int dt; // これは通常の変数
int &rf = dt; // 参照であるrfを宣言し、dtのアドレスを設定する
dt = 100; // dtは100、rfも100になる
rf = 200; // rfは200、dtも200になる
//rf = &dt; // エラー
 
12.3 参照とポインタの比較
(1)参照のアドレス設定は初期化のときだけである。ポインタはいつでもアドレス設定ができる
(2)参照と初期化したオブジェクトアドレスとの結合は、
  プログラムが終了するまで解かれることはない。
  ポインタはいつでも設定変更できる。
(3)ポインタはアドレスと値を操作できるが、参照は値を操作できるだけである。
  参照自身を変更する演算子はない
int dt;
int &rf = dt; // 参照はdtとだけ書く
rf = 100; // 参照はrfとだけ書く
*pt = 200; // ポインタは*を付ける必要がある
//rf = &dt; // エラー。参照は初期化以外でのアドレス設定はできない
pt = &dt; // ポインタは初期化以外でのアドレス設定もできる
pt = &rf; // この&rfは&dtの動作になる。参照自身のアドレス取り出しではない
++pt; // ポインタ自身を+1する
++rf; // この++rfは++dtの動作になる。参照自身の更新ではない
12_12-3
 
12.4 参照と定数処理
参照はオブジェクトのアドレスを自動的に設定するものですが、
1234のような定数を設定することもできます。
ただし属性をconstにする必要があります。
//int &n = 1234;(1)誤り
const int &n = 1234; // (2)正しい
cout << n << 'n'; // 出力は1234
 
12.5 参照で配列を処理する
参照の配列は宣言できませんが、参照で配列を処理することはできます。
配列を処理する参照は、既存の配列の全体を表現します。
次に記述例を示します。
int a[5] = {10, 20, 30, 40, 50}; // 配列がある
int (&r)[5] = a; // サイズが5であるint配列への参照を設定
cout << r[0] << " " << r[4] << 'n'; // 出力:10 50
 
12.6 参照を仮引数に使う
12_12-6