参照変数は参照変数を初期化した変数の管理しているメモリ領域にアクセスし続けることになります
ソーラー「ところで
お話は戻って
変数宣言
int a;
により
変数aが生成されているとします。
このとき
int& b=a;
のように
int&型の参照変数bにはint型の変数aを代入して初期化することができます
int&型の参照変数bは
数値データ
1
や
2
でなく
int型の変数aを代入することで初期化できるのがポイントなんです
実は
bのint&型の参照変数宣言
int& b;
を行うときは
int& b=a;
のように
変数aを代入して💖初期化を同時に💖実行する必要があるんだよ
int& b;
b=a;
のように
int& b;
と
b=a;
を分けて実行すると
(アクティブ) E0252 参照 変数 "b" には初期化子が必要です
エラー C2530 'b': 参照が初期化されずに宣言されています。
のように
ビルドエラーが表示されるから
注意が必要だね。
ところで
int& b=a;
と
参照変数宣言、初期化がセットになっているのには秘密があります
参照変数bが変数aによって初期化されると
💖参照変数bは💖
変数aの管理しているメモリ領域にアクセスしつづけることになります
つまり
参照変数bは変数aそのものを表すことになると
ずっと変数aを表すことになります
たとえば
この参照変数bには
int c=1;
と
新たに変数宣言、初期化されたint型の変数c
を代入することができます
が
参照変数bに変数cが代入されても
💖参照変数bは💖
変数cの管理しているメモリにアクセスし
変数cそのものになることはありません
変数cの持っている値1だけが
💖値渡し💖
されることになります
ですので
参照変数bに変数cを代入した後
参照変数bに格納されている数値データを1から2に変更しても
変数cに格納されている数値データは1のままで
1から2に変更されるようなことはおこりません
その場合
参照変数bは変数aそのものを表しているので
変数aに格納されている数値データが1から2に変更されることになります
そのことを示すプログラムはこちらです
👇
#include <iostream>
#include <string>//文字列を取り扱うためにヘッダファイル <string>をインクルードしています
using namespace std;
int main() {
int a=10;
cout <<"変数aに格納されている数値データは" <<a <<"です"<< "\n";
int& b = a;
int c =1;
b = c;
cout << "変数aに格納されている数値データは" << a << "です" << "\n";
b = 2;
cout << "変数aに格納されている数値データは" << a << "です" << "\n";
cout << "変数cに格納されている数値データは" << c << "です" << "\n";
return 0;
}
ビルド実行結果
変数aに格納されている数値データは10です
変数aに格納されている数値データは1です
変数aに格納されている数値データは2です
変数cに格納されている数値データは1です
ソーラー「このように
int& b = a;
と
変数aによって
1度、初期化されたときの
💖参照変数bは💖
変数aの管理しているメモリにアクセスしつづけることになるんだね」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます