人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C++のポインターと参照の『違い』を解説しているサイトをご紹介ください。

自分で調べたのですが、ポインターと参照は同じと解説しているサイトが多く、違いを解説しているサイトは見つけられませんでした。

※ポインターと参照の違いをアドレス演算のみというような解説をしているサイトは除外してください

●質問者: 姉本
●カテゴリ:コンピュータ 学習・教育
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

質問者から

訂正です。

※ポインターと参照の違いをアドレス演算のみと?

※ポインターと参照の違いをアドレス演算の有無のみと?


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


姉本さんのコメント
ご回答ありがとうございます。 早速読んでみます。

姉本さんのコメント
ここら辺がためになりました。 ・書き方はアローを使わない分書タイプは楽 ・基本的にconst付きポインタのような扱い ・宣言時に初期化しなくてはならない為NULLを参照することがなく安全 ・メソッドの引数ではデフォルト引数付きに出来ないので、オブジェクトの引渡しには「参照」、内部で変更する場合は「ポインタ」などの運用が良い ありがとうございました。

2 ● a-kuma3
●30ポイント

ぼくの理解では、

です。

C は、高級言語という面も持ち合わせていますが、コンパイラの最適化を助けるためのメッセージを書くという面が大きいです。

参照は定数扱いなので、機械語に翻訳したときに固定値に書き換えることが可能だ、というメッセージをコンパイラに伝えます。
ポインタは、変数なので固定値には書き換えることができなくて、レジスタに入れるか間接で参照するようにしかコンパイルできません(というメッセージをコンパイラに伝えています)。
両者の間に位置するのが、const 修飾子がついたポインタです。


参照とポインタの、もうひとつの違いは「抽象化のレベル」です。
どちらも「値」が格納されている位置を表していますが、参照の方が抽象化のレベルが高いです。
ポインタの方は、数字で表されている番地(数値)を表現しているので、「隣」とか「三つ先」が表現できてしまいます。
参照はポインタと比べてより抽象化されていて、場所を表しているものが数値かどうかも分かりません。
位置を表す「ラベル」がふられている、と考えると良いと思います。

「値を指すもの」として抽象化をしたものに、「ハンドル」があります。
C / C++ では、言語のレベルでは扱われていませんが、これも値を指すものです。
ハンドルは、値を指すものとして扱われていて通常は数値型で表されますが「番地」というよりは「背番号」です。
数値ではあるけれど、数としての意味がない、という意味での抽象化はポインタよりは、参照の考え方に寄っています。

id:anemoto さんが質問で書かれているサイトの紹介ではない回答ですが。


姉本さんのコメント
コンパイラへの最適化メッセージとまでは理解が及んでいませんでした。 参照:定数 ポインタ:変数 と理解するならば、確かにコンパイラはその様に最適化しますね。 ありがとうございました。

3 ● dilutionist
●30ポイント

参照はポインタと比べるべきではない - みねこあ
C++マニアック,リファレンス=参照の使い方,how to use reference,C++入門,C++言語講座

紹介したエントリーのタイトルが質問条件に対して天邪鬼的なことになっていますが、別に喧嘩売ってるわけではありません。


姉本さんのコメント
別名ということで、なるほどと腑に落ちました。 ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ