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


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

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

回答の条件
  • URL必須
  • 1人1回まで
  • 登録:
  • 終了:2015/05/29 01:11:38
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:anemoto

訂正です。

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

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

ベストアンサー

id:fatena No.1

回答回数126ベストアンサー獲得回数26

ポイント40pt

姉本様はポインターと参照の既述方法は理解していて、それらの性質の違いと、それらの使い分け(どんなときにどちらを使うか)を知りたいのだと解釈しました。
以下ご参考になりますと幸いです。
▼性質の違いについて
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

id:anemoto

ご回答ありがとうございます。
早速読んでみます。

2015/05/24 21:30:45
id:anemoto

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

ありがとうございました。

2015/05/29 01:10:06

その他の回答2件)

id:fatena No.1

回答回数126ベストアンサー獲得回数26ここでベストアンサー

ポイント40pt

姉本様はポインターと参照の既述方法は理解していて、それらの性質の違いと、それらの使い分け(どんなときにどちらを使うか)を知りたいのだと解釈しました。
以下ご参考になりますと幸いです。
▼性質の違いについて
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

id:anemoto

ご回答ありがとうございます。
早速読んでみます。

2015/05/24 21:30:45
id:anemoto

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

ありがとうございました。

2015/05/29 01:10:06
id:a-kuma3 No.2

回答回数4974ベストアンサー獲得回数2154

ポイント30pt

ぼくの理解では、

  • 参照:定数
  • ポインタ:変数

です。

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

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


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

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

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

id:anemoto

コンパイラへの最適化メッセージとまでは理解が及んでいませんでした。

参照:定数
ポインタ:変数

と理解するならば、確かにコンパイラはその様に最適化しますね。

ありがとうございました。

2015/05/29 01:10:32
id:dilutionist No.3

回答回数154ベストアンサー獲得回数51

ポイント30pt

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

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

id:anemoto

別名ということで、なるほどと腑に落ちました。
ありがとうございます。

2015/05/29 01:10:54

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません