アカウント名:
パスワード:
Cのポインタはそれ自体が曲者だと思いますよ。
Cのポインタは、インデックスレジスタ(汎用レジスタのアドレスポインタモード)を抽象化した物だから、機械語が分かっていれば何の不思議も無い。
でも、Cでのポインタ関連の「宣言構文」は、凄く曲者だと思う。何で、あんな仕様になったのやら...
あれはそれなりに合理的かつわかりやすいのですが、演算子の前置後置や優先度がややこしいので台無しになっています
あと、人はどうも変数を宣言するときと使うときで別の思考回路が働いている印象はありますpointer to array of intはわかりやすいし、(*a)[10]もわかりやすいですが、int (*)[]は軽く死ねます真ん中の式からaとか10を取り除いただけですが
いや、int *a;は、*aがint型である、という意味だから。そう考えると、とても素直な表現だと思うよ。
わけがわからなくなったのはC++以降。
int* a,b;と書く流儀はC++以降ですが、はっきりいって糞だと思います。
C++というかStroustrup氏の流儀だとおもいますが、そのスタイルの場合、
int* a;int b;
のように、「一宣言文で複数の変数を宣言しない。変数宣言は一行一変数。」という流儀もセットです。片っぽだけ採用しちゃだめ。
#そう徹底すれば、確かに「int* a,b」問題は起きませんけど…、冗長なので私は好きになれません。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall
そんな細かい話じゃなくてさ、 (スコア: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 がポインタなのに b は int ってことでしょ。
言語仕様として両方ともポインタと言うことにしておけばわかりやすかったと。
# int *a;
# ではなくて
# int * a;
# と記述する流儀もあります。
Re: (スコア:0)
そうです、元々言いたかったのは bがintになる所です。
特に
int* a, b;
とした時ですね。
# int * a は初めて見ました。 サイズ計算してるみたいに見えますね。
(int *a, b で bがポインタになると逆に勘違いしてました。)
Re: (スコア:1)
int* a,b;
と書く流儀はC++以降ですが、はっきりいって糞だと思います。
Re:そんな細かい話じゃなくてさ、 (スコア:1)
C++というかStroustrup氏の流儀だとおもいますが、そのスタイルの場合、
のように、「一宣言文で複数の変数を宣言しない。変数宣言は一行一変数。」という流儀もセットです。片っぽだけ採用しちゃだめ。
#そう徹底すれば、確かに「int* a,b」問題は起きませんけど…、冗長なので私は好きになれません。