訂正です。
※ポインターと参照の違いをアドレス演算のみと?
↓
※ポインターと参照の違いをアドレス演算の有無のみと?
▽1
●
すいんぐ ●40ポイント ベストアンサー |
姉本様はポインターと参照の既述方法は理解していて、それらの性質の違いと、それらの使い分け(どんなときにどちらを使うか)を知りたいのだと解釈しました。
以下ご参考になりますと幸いです。
▼性質の違いについて
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
ぼくの理解では、
です。
C は、高級言語という面も持ち合わせていますが、コンパイラの最適化を助けるためのメッセージを書くという面が大きいです。
参照は定数扱いなので、機械語に翻訳したときに固定値に書き換えることが可能だ、というメッセージをコンパイラに伝えます。
ポインタは、変数なので固定値には書き換えることができなくて、レジスタに入れるか間接で参照するようにしかコンパイルできません(というメッセージをコンパイラに伝えています)。
両者の間に位置するのが、const 修飾子がついたポインタです。
参照とポインタの、もうひとつの違いは「抽象化のレベル」です。
どちらも「値」が格納されている位置を表していますが、参照の方が抽象化のレベルが高いです。
ポインタの方は、数字で表されている番地(数値)を表現しているので、「隣」とか「三つ先」が表現できてしまいます。
参照はポインタと比べてより抽象化されていて、場所を表しているものが数値かどうかも分かりません。
位置を表す「ラベル」がふられている、と考えると良いと思います。
「値を指すもの」として抽象化をしたものに、「ハンドル」があります。
C / C++ では、言語のレベルでは扱われていませんが、これも値を指すものです。
ハンドルは、値を指すものとして扱われていて通常は数値型で表されますが「番地」というよりは「背番号」です。
数値ではあるけれど、数としての意味がない、という意味での抽象化はポインタよりは、参照の考え方に寄っています。
# id:anemoto さんが質問で書かれているサイトの紹介ではない回答ですが。
参照はポインタと比べるべきではない - みねこあ
C++マニアック,リファレンス=参照の使い方,how to use reference,C++入門,C++言語講座
紹介したエントリーのタイトルが質問条件に対して天邪鬼的なことになっていますが、別に喧嘩売ってるわけではありません。