C言語の場合、配列は0からですが、他の言語では1からだったり、
どこからか指定できたりするようで、ならC言語の配列は何故0からとなったのでしょうか?海や山より大きな理由があるのでしょうか?
0からであることに不便も不満もありませんが、気になったので投稿させていただきました。
コメント

- 2:ゲスト
- 2007/10/10 19:17
オフセット、という概念でとらえると良いのでは。
a[n]の配列がメモリ上にある場合、インデックスは
その配列の先頭位置からどれだけ離れた地点の要素
を指しているかを表す、と考えられます。
つまり先頭要素は0だけ離れたポイントにある、
と見ることができるのではないでしょうか。

- 4:ゲスト (おばさんです)
- 2007/10/11 11:29
C言語は、高級アセンブラ言語とも言われほど、アセンブラチックな言語です。アセンブラで配列を扱おうとすると配列の最初の領域は0からスタートになりますよね。

- 5:ゲスト (たてのん)
- 2007/10/11 15:02
ホントのところは知りませんが、コンピューター寄りか人間寄りかの違いではないでしょうか?
コンピューターのメモリは先頭が0になりますので、そのメモリを直接読み書きする配列の引数は0の方が、コンピューターにとって自然です。必然的にコンピューター言語へ変換するソフトであるコンパイラ等も先頭が0の方が混乱が少なくて済みます。
一方、人間が数字を意識する時の先頭は普通1です。0は今でこそ当たり前の概念ですがその発明は画期的だったのです。
そこで人間にわかりやすくしようとすると、配列の先頭は1の方が直感的に理解できます。「配列データの一つ目」と表現するとわかりやすいでしょうか。
C言語は一応高級言語ではありますが、かなりコンピューター寄りな作りになっていて、それゆえに初心者プログラマにはとっつきにくい部分が多々あります。
しかし、ある程度コンピューターの動作を理解しているプログラマにとっては、色々と融通の利くとても使いやすい言語でもあるのです。
narupandaさんもコンピューターの動作のもっと深いところを理解すると、配列の先頭が0であることがとても自然なことに感じられるようになると思いますよ。

- 6:narupanda
- 2007/10/11 15:58
成程、確かに言われてみれば当然の事のように思えてきました。*(a+i)も2次元配列だろうがなんだろうが常々使ってた時期もあったのにすっかり忘れてました。
コンピューター利用者的考え方が出来るようになるには、まだまだですね。回答してくださったゲストの方々には厚く御礼申し上げます。
もっと勉強がんばります。

- 7:ゲスト
- 2007/10/12 22:02
10進数は
16進数は
「10通り」を配列やfor文等で表現する場合
ずーっと思ってたから、なんにも違和感なくそういうもんだと
思ってました。
そのためか、自分の場合は、
前へ 1 次へ![]()
コメントする
[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。
[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。






a[i]が、*(a+i)と等価なためでは?