アカウント名:
パスワード:
Cのポインタはそれ自体が曲者だと思いますよ。
Cのポインタは、インデックスレジスタ(汎用レジスタのアドレスポインタモード)を抽象化した物だから、機械語が分かっていれば何の不思議も無い。
でも、Cでのポインタ関連の「宣言構文」は、凄く曲者だと思う。何で、あんな仕様になったのやら...
あれはそれなりに合理的かつわかりやすいのですが、演算子の前置後置や優先度がややこしいので台無しになっています
あと、人はどうも変数を宣言するときと使うときで別の思考回路が働いている印象はありますpointer to array of intはわかりやすいし、(*a)[10]もわかりやすいですが、int (*)[]は軽く死ねます真ん中の式からaとか10を取り除いただけですが
いや、int *a;は、*aがint型である、という意味だから。そう考えると、とても素直な表現だと思うよ。
わけがわからなくなったのはC++以降。
> ネットでは 「ポインタ型」の宣言なんだから 型の部分が int* の方がわかりやすいという意見も結構あるみたいですね。
マシン語を経験したことのない人にはそちらの方が分かりやすいかも知れませんが、もっと複雑なことを考えると破綻します。「int*」は整数へのポインタ型を表す表記として、じゃあ「ポインタへの配列」とか「関数へのポインタ」はどういう表記をすればいいの?って。
そもそも「*」は演算子ですし。
8ビット時代のBASICから入った私としては、スペースなんてどうでもいいのですが。
より多くのコメントがこの議論にあるかもしれませんが、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)
ネットでは 「ポインタ型」の宣言なんだから 型の部分が int* の方がわかりやすいという意見も結構あるみたいですね。
いずれにしてもどっちでもよくなってしまったがために面倒な事になってる気がしますが。
Re:そんな細かい話じゃなくてさ、 (スコア:0)
> ネットでは 「ポインタ型」の宣言なんだから 型の部分が int* の方がわかりやすいという意見も結構あるみたいですね。
マシン語を経験したことのない人にはそちらの方が分かりやすいかも知れませんが、もっと複雑なことを考えると破綻します。
「int*」は整数へのポインタ型を表す表記として、じゃあ「ポインタへの配列」とか「関数へのポインタ」はどういう表記をすればいいの?って。
そもそも「*」は演算子ですし。
8ビット時代のBASICから入った私としては、スペースなんてどうでもいいのですが。