自分で調べたのですが、ポインターと参照は同じと解説しているサイトが多く、違いを解説しているサイトは見つけられませんでした。
※ポインターと参照の違いをアドレス演算のみというような解説をしているサイトは除外してください
姉本様はポインターと参照の既述方法は理解していて、それらの性質の違いと、それらの使い分け(どんなときにどちらを使うか)を知りたいのだと解釈しました。
以下ご参考になりますと幸いです。
▼性質の違いについて
http://utage.headwaters.co.jp/blog/?p=2939
▼使い分けについて
http://sealsoft.jp/ptr_and_ref.html
http://dixq.net/forum/viewtopic.php?f=3&t=6184
姉本様はポインターと参照の既述方法は理解していて、それらの性質の違いと、それらの使い分け(どんなときにどちらを使うか)を知りたいのだと解釈しました。
以下ご参考になりますと幸いです。
▼性質の違いについて
http://utage.headwaters.co.jp/blog/?p=2939
▼使い分けについて
http://sealsoft.jp/ptr_and_ref.html
http://dixq.net/forum/viewtopic.php?f=3&t=6184
ご回答ありがとうございます。
早速読んでみます。
ここら辺がためになりました。
・書き方はアローを使わない分書タイプは楽
・基本的にconst付きポインタのような扱い
・宣言時に初期化しなくてはならない為NULLを参照することがなく安全
・メソッドの引数ではデフォルト引数付きに出来ないので、オブジェクトの引渡しには「参照」、内部で変更する場合は「ポインタ」などの運用が良い
ありがとうございました。
ぼくの理解では、
です。
C は、高級言語という面も持ち合わせていますが、コンパイラの最適化を助けるためのメッセージを書くという面が大きいです。
参照は定数扱いなので、機械語に翻訳したときに固定値に書き換えることが可能だ、というメッセージをコンパイラに伝えます。
ポインタは、変数なので固定値には書き換えることができなくて、レジスタに入れるか間接で参照するようにしかコンパイルできません(というメッセージをコンパイラに伝えています)。
両者の間に位置するのが、const 修飾子がついたポインタです。
参照とポインタの、もうひとつの違いは「抽象化のレベル」です。
どちらも「値」が格納されている位置を表していますが、参照の方が抽象化のレベルが高いです。
ポインタの方は、数字で表されている番地(数値)を表現しているので、「隣」とか「三つ先」が表現できてしまいます。
参照はポインタと比べてより抽象化されていて、場所を表しているものが数値かどうかも分かりません。
位置を表す「ラベル」がふられている、と考えると良いと思います。
「値を指すもの」として抽象化をしたものに、「ハンドル」があります。
C / C++ では、言語のレベルでは扱われていませんが、これも値を指すものです。
ハンドルは、値を指すものとして扱われていて通常は数値型で表されますが「番地」というよりは「背番号」です。
数値ではあるけれど、数としての意味がない、という意味での抽象化はポインタよりは、参照の考え方に寄っています。
# id:anemoto さんが質問で書かれているサイトの紹介ではない回答ですが。
コンパイラへの最適化メッセージとまでは理解が及んでいませんでした。
参照:定数
ポインタ:変数
と理解するならば、確かにコンパイラはその様に最適化しますね。
ありがとうございました。
参照はポインタと比べるべきではない - みねこあ
C++マニアック,リファレンス=参照の使い方,how to use reference,C++入門,C++言語講座
紹介したエントリーのタイトルが質問条件に対して天邪鬼的なことになっていますが、別に喧嘩売ってるわけではありません。
別名ということで、なるほどと腑に落ちました。
ありがとうございます。
ご回答ありがとうございます。
2015/05/24 21:30:45早速読んでみます。
ここら辺がためになりました。
2015/05/29 01:10:06・書き方はアローを使わない分書タイプは楽
・基本的にconst付きポインタのような扱い
・宣言時に初期化しなくてはならない為NULLを参照することがなく安全
・メソッドの引数ではデフォルト引数付きに出来ないので、オブジェクトの引渡しには「参照」、内部で変更する場合は「ポインタ」などの運用が良い
ありがとうございました。