アカウント名:
パスワード:
Cのポインタはそれ自体が曲者だと思いますよ。
Cのポインタは、インデックスレジスタ(汎用レジスタのアドレスポインタモード)を抽象化した物だから、機械語が分かっていれば何の不思議も無い。
でも、Cでのポインタ関連の「宣言構文」は、凄く曲者だと思う。何で、あんな仕様になったのやら...
あれはそれなりに合理的かつわかりやすいのですが、演算子の前置後置や優先度がややこしいので台無しになっています
あと、人はどうも変数を宣言するときと使うときで別の思考回路が働いている印象はありますpointer to array of intはわかりやすいし、(*a)[10]もわかりやすいですが、int (*)[]は軽く死ねます真ん中の式からaとか10を取り除いただけですが
いや、int *a;は、*aがint型である、という意味だから。そう考えると、とても素直な表現だと思うよ。
わけがわからなくなったのはC++以降。
なんでaの宣言に*aのことを書くのん?
aの宣言なのにintって書くでしょ?
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲは一日にしてならず -- アレゲ見習い
そんな細かい話じゃなくてさ、 (スコア:1)
Cのポインタはそれ自体が曲者だと思いますよ。
Re: (スコア:2)
Cのポインタは、インデックスレジスタ(汎用レジスタのアドレスポインタモード)を抽象化した物だから、機械語が分かっていれば何の不思議も無い。
でも、Cでのポインタ関連の「宣言構文」は、凄く曲者だと思う。
何で、あんな仕様になったのやら...
-- Buy It When You Found It --
Re: (スコア:1)
あれはそれなりに合理的かつわかりやすいのですが、演算子の前置後置や優先度がややこしいので台無しになっています
あと、人はどうも変数を宣言するときと使うときで別の思考回路が働いている印象はあります
pointer to array of intはわかりやすいし、(*a)[10]もわかりやすいですが、int (*)[]は軽く死ねます
真ん中の式からaとか10を取り除いただけですが
Re: (スコア:0)
これはなんとかしてほしいところ。
あとは宣言時と利用時とは別の記号にしてほしかったかなー。
宣言時は *付きがポインタを意味するけど、利用時は *付きは実際の値を意味する(ポインタじゃなくなる)。
Re: (スコア:0)
いや、
int *a;
は、*aがint型である、という意味だから。
そう考えると、とても素直な表現だと思うよ。
わけがわからなくなったのはC++以降。
Re: (スコア:0)
なんでaの宣言に*aのことを書くのん?
Re:そんな細かい話じゃなくてさ、 (スコア:0)
aの宣言なのにintって書くでしょ?