ポインタ、参照(リファレンス)、束縛(バインディング)、それぞれ似てるけど同様に語ると混乱の元ではないかと。
ポインタはメモリアドレスに型情報をくっつけたもの。加減算できる点が特徴で、それはメモリアドレスの概念由来だろう。
変数というメモリ上の記憶域を指すフィジカルに近い概念で、配列の運用(*p++で回すとか)、引数の参照渡し(コピー抑止、複数戻り値の実現)、メモリそのものの管理(malloc)あたりで、基本手作業による最適化のための仕組みという側面が近いと思う。
perlだと、変数はやっぱり記憶域ではあるけれど概念として一段抽象化されていて、メモリという連続した領域じゃなく独立した領域の集合となっているから、リファレンスの加減算はなし。
また、配列も単なるメモリの並びからより抽象化してリストもできたから、配列運用や複数戻り値もリストがあるのでリファレンスに頼ることはなくなる。
ただ、オブジェクトの概念があって、オブジェクトをオブジェクトとして入れる変数は用意せずリファレンスとすることで、文法上の変数の型を増やさない、コピー時のコンストラクタの問題を回避するなどのほか、オブジェクトの概念を援用して無名関数や無名変数、ファイルハンドルなども変数=引数として扱えるようにした。
で、pythonはもう一段推し進めて、今までの数値や文字、配列もオブジェクトとみなし、変数はすべてオブジェクトを指し示すもので、記憶域は変数としてあるのではなくオブジェクトとしてあり、変数にリファレンスという特別なものがあるのではなくなり、変数は記憶域をもっていて値が代入されるものではなく、既にあるオブジェクトに変数名という名前(ラベル)を付けて束縛する行為とされる。
見方を変えると変数はすべてにおいてリファレンスで、代入とは値そのものの代入でなく値へのリファレンスの代入で、引数も参照渡しであるが、引数に代入したところでリファレンスが変わるだけで元の値が変わるわけではなく、しかし他の演算などでは自動的にデリファレンスされており、単純な数値や文字列など、自身を変更する機構を持たない(できない)ものにとっては実質的に今までとの違いはないに等しい。隠ぺいといえば隠ぺいか。
java, javascript, rubyもおおむねこの考え方でよかったと思う。
ただ、phpは若干両者が混じったところがあって微妙なところがある。
参考
ポインタ使ったことのない人?
Javaプログラマじゃね?
そらポインタのない言語では使いようがないだろうw http://anond.hatelabo.jp/20120614115754 http://anond.hatelabo.jp/20120614111529
Pythonやrubyはよく知らんが、少なくともJavaとC#はポインタはないんじゃなく隠蔽されてるだけだけどな。 なので、ポインタの概念を知らない奴が安易に使うとハマる。
ポインタ、参照(リファレンス)、束縛(バインディング)、それぞれ似てるけど同様に語ると混乱の元ではないかと。 ポインタはメモリアドレスに型情報をくっつけたもの。加減算...
ポインタがわからないってつまり計算機の仕組みを知らないってことだよな それでもプログラマが務まる時代になってしまった
いらないものはいらないからな。 大事なのは論理構成であって、メモリ管理じゃない
いや C++のコンストラクタが、使わない時にでも動くのが嫌なので メモリは バルクで取って コンストラクタは必要な時だけ 手動で呼び出すぞ。 メモリはいくらでも取っていいが、...
メモリはいくらでも取っていいが、CPUは有限資産だからな。 PC プログラマだけどメモリは潤沢なのに CPU 資源だけ制限があるってすごく不思議に聞こえる。 今頃は PC だったら CPU 資源...
STLを使うことによる オーバーヘッドは 数~数百バイトオーダーだろ。どんなに見積もってもキロ単位。 いくらなんでも、キロ単位を 詰めることは稀 というのがメモリの見解。 メ...
それ、単純にクラスの使い方が悪いってだけに見えるんだが。 少なくともそんなカツカツにタイミング調整が必要になるソフトで、そんな頻繁にオブジェクト生成すること自体間違って...
キモヲタは誰かとのコミュニケーションを面倒くさがるよな 特に女とのコミュニケーション コミュニケーションしようとしないからもてた試しのない自分への言い訳として用いているの...
ポインタを使う必要は? c# java php ruby perl python どれもポインタなんてねーよ
値と参照の違いくらいは分かっとかないとマジでやばいよ〜
なんつーかネタにマジレスって感じ
unsafe下でならC#はポインターを扱える もっとも、普段はそういうもの使う必要はないんで忘れても問題ないが
http://anond.hatelabo.jp/20120614111008 俺はバイナリファイルの解析に使った。 ファイル先頭部のヘッダ部分のデータの並びを定義したクラスのポインタに、ファイル先頭部のメモリアドレスをキ...
VRAMのアドレスを指定して、お絵かき。(もはや、最近のOSではできないが)
幼女の乳首の新しい呼び名としてはどうか
それはぬるぽ
つーかC/C++使った時点でどう頑張ってもポインタは使うと思うが…
つ STL
STLコンテナの要素はポインタ型になるだろ。すぐに。 でかいオブジェクトも気にせず値コピーしまくるってこと?
スマポ アウトポ
スマートポインタだってポインタだろ。 参照カウントだのマーク&スイープだのくらいは知ってないと使えなくねえ?
スマートポインタは、ここで言われている アドレスの参照指定としてのポインタじゃないよ。単なるコンテナ。名前にポインタってついてるからといって、いわゆるポインタじゃない...
手動で参照カウントしろなんて言ってねえよw てかマジでポインタ理解せずにC++書いてる(ましてboostなんか使ってる)奴なんて存在すんの? それが信じられないってことを言ってるんだ...
さぁ?元ネタは『どう頑張ってもC++でも ポインタは使う』って話だったから ライブラリを使いこなせば 頑張れば ポインタは 見かけ上使わない。(ライブラリの中は知らない。普...