雑記
ジ・オリジン
最終更新:
匿名ユーザー
-
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];
と宣言することで、列挙の最期の定数を終端として扱える。
単なる「お約束」に見えることでも、そんな意味があるんだな、というお話。