アカウント名:
パスワード:
(統一仕様はないけど)アセンブリ言語#CAP-XとかCASLとかっていうのは統一仕様に入るのかな?
C(not C++)を躓きなく,ものにしたいと思うなら、完全でなくていいからアセンブラで書かれたのを読めるように学習してからのほうが結局早道だとおもう。
俺もZ80をやってからCをやったので、ポインタが難しいという人のことが理解できない。
私も最初はBASICだったけど、Z80,6809と続いたのでポインタのどこが難しいのかさっぱり分からなくて。6809だとインダイレクトアドレッシング(って名前だったっけ?)まんまだもん。そりゃ、今でも***pとか書かれていたら身構えるけど。
でも新人教育の講師で「ポインタが分からない」という人がいたらどう教えていいか悩むと思います。Cだとやっぱりアドレスの概念から教えるのが近道なのかなぁ。
「バグ取れワンワン」
Cのポインタもこれ [animal-planet.jp]くらい自律能力を持ってくれたら楽できるのにね。
素の自律能力にバグがあった場合を考えると、ぞっとします。一方で自律能力があるなら、Cよりもっと抽象化して欲しい。
というわけで、Cのポインタは今ぐらいでちょうど良い。
「獲物の匂いを感知し...(バグの)居場所を示す時、尾をピンと上げる」あたりの能力を希望。
メモリとアドレスの概念を教える以外に何を教えるというのでしょうかl。
型とそのポインタを表す表記方法がわかりにくいんですよPascalみたいな方式の方がわかりやすい
int a = 1;int *b = &a, c = 2;*b = c;
分かってしまえば大したことではないのだけど、型名の方に*をつけ、1回で1つの変数しか宣言しないようにして覚えた。慣れてしまえば、どちらでもいいけど、理屈で覚えようとするとはまる。
理屈で覚えようとするからこそ、変数名のほうに*をつけるんじゃないの?型名のほうに*をつけるのは、理屈にあわない。
> int *b;
これは、*bがint型ですよ、と言ってるんだと解釈してる。*bがint型なら、bはint型へのポインタですよね。
アセンブラみたいに、ポインタ(アドレス)を「型」として扱わず、レジスタに格納されている値を数値とみなそうがアドレスとみなそうが自由、みたいなほうが、かえってわかりやすいかもね。間違いは増えるかも知れないが。
int* b;だと、空白の右側も左側もポインタですっきりする、というのはその通りだと思います。でも、「"int*"はintへのポインタを意味する」という約束をひとつ追加したことになります。ひとつだけなら問題ありません。しかし、*は実際には演算子なので、ほかの演算子と組み合わせた複雑な表現が可能です。そうなってくると、「int* b;」式の考えは破綻するのではないかと思います。
たしかに、型宣言と同時に初期値を指定するときの表現は、すっきりしないですね。ただ、それも「ルールをひとつ追加」と思って納得することにしてます。
C++、とくに参照の表現は完全に腐っていると思います。
int a;int* b, c;
c = &a;???
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
最初のバージョンは常に打ち捨てられる。
そのほかのプログラミング言語って (スコア:3)
Re: (スコア:0)
(統一仕様はないけど)アセンブリ言語
#CAP-XとかCASLとかっていうのは統一仕様に入るのかな?
C(not C++)を躓きなく,ものにしたいと思うなら、完全でなくていいからアセンブラで書かれたのを読めるように学習してからのほうが結局早道だとおもう。
Re: (スコア:1)
Re: (スコア:1)
俺もZ80をやってからCをやったので、ポインタが難しいという人のことが理解できない。
Re:そのほかのプログラミング言語って (スコア:1)
私も最初はBASICだったけど、Z80,6809と続いたのでポインタのどこが難しいのかさっぱり分からなくて。6809だとインダイレクトアドレッシング(って名前だったっけ?)まんまだもん。そりゃ、今でも***pとか書かれていたら身構えるけど。
でも新人教育の講師で「ポインタが分からない」という人がいたらどう教えていいか悩むと思います。Cだとやっぱりアドレスの概念から教えるのが近道なのかなぁ。
vyama 「バグ取れワンワン」
Re:そのほかのプログラミング言語って (スコア:1)
「バグ取れワンワン」
Cのポインタもこれ [animal-planet.jp]くらい自律能力を持ってくれたら楽できるのにね。
Re: (スコア:0)
素の自律能力にバグがあった場合を考えると、ぞっとします。
一方で自律能力があるなら、Cよりもっと抽象化して欲しい。
というわけで、Cのポインタは今ぐらいでちょうど良い。
Re: (スコア:0)
「獲物の匂いを感知し...(バグの)居場所を示す時、尾をピンと上げる」あたりの能力を希望。
Re: (スコア:0)
メモリとアドレスの概念を教える以外に何を教えるというのでしょうかl。
Cの表記法が教えにくい (スコア:0)
型とそのポインタを表す表記方法がわかりにくいんですよ
Pascalみたいな方式の方がわかりやすい
Re: (スコア:0)
分かってしまえば大したことではないのだけど、型名の方に*をつけ、1回で1つの変数しか宣言しないようにして覚えた。慣れてしまえば、どちらでもいいけど、理屈で覚えようとするとはまる。
Re: (スコア:0)
理屈で覚えようとするからこそ、変数名のほうに*をつけるんじゃないの?
型名のほうに*をつけるのは、理屈にあわない。
> int *b;
これは、*bがint型ですよ、と言ってるんだと解釈してる。
*bがint型なら、bはint型へのポインタですよね。
アセンブラみたいに、ポインタ(アドレス)を「型」として扱わず、
レジスタに格納されている値を数値とみなそうがアドレスとみなそうが自由、
みたいなほうが、かえってわかりやすいかもね。間違いは増えるかも知れないが。
Re: (スコア:0)
特に、C++の場合は参照があって、int &bと書いても&bがint型になるわけではない。int*でint型のポインタ、int&でint型の参照としてしまうとすっきりする。
C++が腐っていると言えばそれまでだが、結局のところ、宣言の際に、変数名の前に*があれば、その変数はポインタとなり、=があっても、代入じゃなくて、初期値の指定と理解しておけば、代入の場合とは区別して考えることができ、矛盾はない。だから、Cにおいては宣言時に変数名に*をつけるのが妥当なんだと思う。
けど、初心者には初期値の指定って、代入にしか見えないんだよな。
Re: (スコア:0)
int* b;だと、空白の右側も左側もポインタですっきりする、というのはその通りだと思います。
でも、「"int*"はintへのポインタを意味する」という約束をひとつ追加したことになります。
ひとつだけなら問題ありません。しかし、*は実際には演算子なので、ほかの演算子と
組み合わせた複雑な表現が可能です。そうなってくると、「int* b;」式の考えは
破綻するのではないかと思います。
たしかに、型宣言と同時に初期値を指定するときの表現は、すっきりしないですね。
ただ、それも「ルールをひとつ追加」と思って納得することにしてます。
C++、とくに参照の表現は完全に腐っていると思います。
Re:Cの表記法が教えにくい (スコア:1)
コーディング規約で、「変数の宣言と初期化を同時に行ってはならない。」と加える事になるかな?
意外とすっきりして見えるし。
Re: (スコア:0)
わざわざ、破壊的操作を増やして、バグを作りやすい方にルールを変更する必要はないよ。
Re: (スコア:0)
int a;
int* b, c;
c = &a;
???
Re: (スコア:0)
Re:Cの表記法が教えにくい (スコア:1)