>> 例えば、言語屋さんから見ると C 言語には "call by reference" がないように見えるそうです。 >> C 言語が "call by reference" と称しているのは、アドレスを渡す "call by value"。
>
> C言語の文法と挙動を正確に理解できるようになるために学ぶ段階において、
> C言語がcall by referenceだなんて考えたらドツボにはまっちゃうわけで。
>
> あくまでcall by valueと考えるべき。
>
> そう考えることで、初学者にもベテランにも言語屋さんにも、誰にとっても
> 矛盾なく使える(かつ、なにか重要なものを欠落させるわけでもない)モデルが
いい方に考えると (スコア:0)
ポインタバリバリ使ってバギーなコード書かれるよりはましかも。
卒業したらJavaに移行して貰えばいいし。
でもコンピュータサイエンティストなら、アセンブラはやって欲しいけどね。
Re:いい方に考えると (スコア:1, すばらしい洞察)
でも、同じ問題は結局JavaだのRubyだのでも生じますよね。ポインタつーか参照については。
単に症状の出方が違う(いきなりコアダンプするか、NullPointerなんたらExceptionが出るか、の違いというか)だけで。
ポインタって、その概念的原理(つまり、なにかがなにかを「参照」する)と、 C独特の構文と、
の2者さえ理解すれば、逆にいえばたいして難関でもないと思います。
あの程度のことを理解*できない*ような人ならば、情報系の学生だろうが仕事だろうが趣味(フリーソフトとか)だろうが
こっちとしてはちょっと
「ポインタ」は「参照」に非ず (スコア:1)
「ポインタ」は「参照」としても利用できるように設計されていますが、「参照」よりも遥かに広いポテンシャルを持った機構です。ゆえにバグの温床となる。
「ポインタ」はメモリアドレスを示す「値」(+型情報)、「参照」はもっと抽象的なオブジェクトやクラスなどを参照することができるデータ。
例えば、言語屋さんから見ると C 言語には "call by reference" がないように見えるそうです。C 言語が "call by reference" と称しているのは、アドレスを渡す "call by value"。
> でも、同じ問題は結局JavaだのRubyだのでも生じますよね。
コンタミは発見の母
Re:「ポインタ」は「参照」に非ず (スコア:2, 参考になる)
>と称しているのは、アドレスを渡す "call by value"。
C言語の文法と挙動を正確に理解できるようになるために学ぶ段階において、
C言語がcall by referenceだなんて考えたらドツボにはまっちゃうわけで。
あくまでcall by valueと考えるべき。
そう考えることで、初学者にもベテランにも言語屋さんにも、誰にとっても
矛盾なく使える(かつ、なにか重要なものを欠落させるわけでもない)モデルが
頭ん中に構築できるわけで。
言語屋さんには見える、
Re:「ポインタ」は「参照」に非ず (スコア:1)
>> C 言語が "call by reference" と称しているのは、アドレスを渡す "call by value"。
>
> C言語の文法と挙動を正確に理解できるようになるために学ぶ段階において、
> C言語がcall by referenceだなんて考えたらドツボにはまっちゃうわけで。
>
> あくまでcall by valueと考えるべき。
>
> そう考えることで、初学者にもベテランにも言語屋さんにも、誰にとっても
> 矛盾なく使える(かつ、なにか重要なものを欠落させるわけでもない)モデルが
コンタミは発見の母
Re:「ポインタ」は「参照」に非ず (スコア:1)
>参照」の間にある違いに起因している、と言いたいわけです。
それはまた微妙に違う問題であるような…
JavaやRubyの参照だって、参照という名の値(Value)をコピってるわけでして。
「変数」を(代入を直接記述する以外の手段で)書き換え可能か、それとも書き換え可能なのは参照先の「データ」だけなのか、
という差があるのでわないかと。
ちなみにPascalのVar渡しは変数を書き換え可能っすね。Fortranはどうだっけ?