雑記
ジ・オリジン
最終更新:
匿名ユーザー
-
view
C言語は、0オリジンである。
つまり、数を数えるとき、0から数え始める。
したがって、例えば配列を宣言するとき
int hoge[100];
とすると、この配列の領域はhoge[0]からhoge[99]までということになる。
慣れるとどうって言うことも無いんだけど、なかなか慣れることができない人もいる。いっそ、1オリジンでhoge[1]からhoge[100]までだったほうが判りやすい。
・・・と最初は思った。でも0オリジンな方がメリットが多いのである。
例えば、ループ処理。こんな感じ。
#define MAX (100) int i; for (i = 0; i < MAX; i++) { 処理 }
これが1オリジンなら、for (i = 0; i < MAX + 1; i++)なんてなんだかこなれていない書き方になる。
・・・このあたりの話って、なんだか小学校の算数でならった「植木算」の話を思い出す。
また、配列とポインタの関係もややこしくなってしまう。
unsigned char hoge[100];
という配列の最初の要素は、1オリジンにしてしまうと添え字のときはhoge[1]、ポインタアクセスだとhoge + 0というふうに、異なる扱いが必要にになってしまう。最初の要素ならいいけど、途中の要素をさしたい場合には余計に混乱する。
また、列挙型(enum)を使うとき、
enum { hoge = 0, piyo, ・ ・ MAX };
のようなenumを定義したとして
int hoge[MAX];
と宣言することで、列挙の最期の定数を終端として扱える。
単なる「お約束」に見えることでも、そんな意味があるんだな、というお話。