参照とは変数のことでありint&型の参照変数にはint型の変数を代入することができます このときint&型の参照変数はint型の変数そのものをあらわすことになります

ソーラー「今日は参照というものについて学んでみよ~うかな😊」


アレサ「参照・・・ですか? 参照渡し(ポインタ渡し)のことですの?」


ソーラー「自作関数の引数となっているポインタ変数に


main関数内で定義された変数のアドレスを代入するのが


     参照渡し(ポインタ渡し)



のことだったね


それと


参照はちょっと意味が違うんだ


一体



              参照とは


どういう意味なのかな😊


って思うよね」


アレサ「何かを参照しているのですか?」


ソーラー「


参照とは変数のことなんだよ


             そう


          参照変数という変数を


       略して参照と呼んでいるんだよ       」


アレサ「参照とは変数・・・なのですか?」


ソーラー「例えば


変数である


int&型の参照変数bは


bのint&型の参照変数宣言


int& b;


により生成されます


このb



int&型の参照変数なんです


そして


int&型の参照変数bにはint型の変数を代入することができます


float&型の参照変数cなら


cのfloat&型の参照変数宣言


float& c;


により生成されます


このc



float&型の参照変数なんです


そして


float&型の参照変数bにはfloat型の変数を代入することができます



たとえば


変数宣言

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;


を分けて実行すると


(アクティブ) E0252 参照 変数 "b" には初期化子が必要です

エラー C2530 'b': 参照が初期化されずに宣言されています。


のように


ビルドエラーが表示されるから


注意が必要だね。


アレサ「


int& b=a;


のように


int&型の参照変数bにint型の変数aを代入することができるのですか?


この


int& b=a;



何をあらわしているのかな・・・?


う~ん


参照変数とはどのような働きをする変数なのですか?」


ソーラー「


int& b=a;


が実行されると


int型の変数aが代入されたint&型の参照変数bは


int型の変数aそのものを表すことになります



以前見てきたように


int型の変数a


のアドレス&aを


ptaのint*型のポインタ変数宣言


int* pta;


により生成されたポインタ変数


pta



pta=&a;


と代入すると


           *ptaは変数aそのもの


を表すことになります


それと似たような感じで


int型の変数a



int&型の参照変数b



int& b=a;


と代入して初期化すると


参照変数bは変数aそのものを表すことになります



ちょうど


同じメモリに


a

b

という名前が付けられていることになります


このとき


変数aに1を代入すれば


参照変数bにも1が代入されることになり


変数aに2を代入すれば


参照変数bにも2が代入されることになり


逆に

参照変数bに1を代入すれば


変数aにも1が代入されることになり


参照変数bに2を代入すれば


変数aにも2が代入されることになります」


そのプログラムは次のようになります。

👇


#include <stdio.h>


int main(void) {


int a;

int& b = a;


a = 1;


printf("%d\n", a);

printf("%d\n", b);


a = 2;


printf("%d\n", a);

printf("%d\n", b);


b = 1;


printf("%d\n", a);

printf("%d\n", b);


b = 2;


printf("%d\n", a);

printf("%d\n", b);


return 0;

}


ビルド実行結果


1

1

2

2

1

1

2

2


アレサ「参照変数のような変数がまだあったのですか


知りませんでしたの(#^^#)」




  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る