C言語の配列はなぜ0からなのでしょうか?
narupanda
narupanda
ATOMRSS
  • コード求むID: 142
  • 登録日時:  2007/10/10 17:42
  • 最終更新日時: 2007/12/14 20:18
  • アクセス数: 2774
  • タグ:  c
  • codeなにがしブックマークに追加する 0 users
  • このページを del.icio.us に追加
  • このページをはてなブックマークに追加

C言語の場合、配列は0からですが、他の言語では1からだったり、
どこからか指定できたりするようで、ならC言語の配列は何故0からとなったのでしょうか?海や山より大きな理由があるのでしょうか?

0からであることに不便も不満もありませんが、気になったので投稿させていただきました。

コメント

  • ゲスト
  • 1:ゲスト (nob274)
  • 2007/10/10 18:43

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

  • GoodJob
  • 0

  • ゲスト
  • 2:ゲスト
  • 2007/10/10 19:17

オフセット、という概念でとらえると良いのでは。
a[n]の配列がメモリ上にある場合、インデックスは
その配列の先頭位置からどれだけ離れた地点の要素
を指しているかを表す、と考えられます。

つまり先頭要素は0だけ離れたポイントにある、
と見ることができるのではないでしょうか。

  • GoodJob
  • 0

  • ゲスト
  • 3:ゲスト (ゲストです)
  • 2007/10/11 09:46

1, をまとめると、コンパイラを作るのが簡単になるからです。

  • GoodJob
  • 0

  • ゲスト
  • 4:ゲスト (おばさんです)
  • 2007/10/11 11:29

C言語は、高級アセンブラ言語とも言われほど、アセンブラチックな言語です。アセンブラで配列を扱おうとすると配列の最初の領域は0からスタートになりますよね。

  • GoodJob
  • 0

  • ゲスト
  • 5:ゲスト (たてのん)
  • 2007/10/11 15:02

 ホントのところは知りませんが、コンピューター寄りか人間寄りかの違いではないでしょうか?

 コンピューターのメモリは先頭が0になりますので、そのメモリを直接読み書きする配列の引数は0の方が、コンピューターにとって自然です。必然的にコンピューター言語へ変換するソフトであるコンパイラ等も先頭が0の方が混乱が少なくて済みます。

 一方、人間が数字を意識する時の先頭は普通1です。0は今でこそ当たり前の概念ですがその発明は画期的だったのです。
 そこで人間にわかりやすくしようとすると、配列の先頭は1の方が直感的に理解できます。「配列データの一つ目」と表現するとわかりやすいでしょうか。

 C言語は一応高級言語ではありますが、かなりコンピューター寄りな作りになっていて、それゆえに初心者プログラマにはとっつきにくい部分が多々あります。
 しかし、ある程度コンピューターの動作を理解しているプログラマにとっては、色々と融通の利くとても使いやすい言語でもあるのです。

 narupandaさんもコンピューターの動作のもっと深いところを理解すると、配列の先頭が0であることがとても自然なことに感じられるようになると思いますよ。

  • GoodJob
  • 0

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

もっと勉強がんばります。

  • GoodJob
  • 0

  • ゲスト
  • 7:ゲスト
  • 2007/10/12 22:02

 2進数は 0,1 の 2通り
10進数は 0から9 の 10通り
16進数は 0からF の 16通り

「10通り」を配列やfor文等で表現する場合 0~9 にするもんだと
ずーっと思ってたから、なんにも違和感なくそういうもんだと
思ってました。

そのためか、自分の場合は、 から系の言語を使うと、やたら っていう式を使ってしまいます。


  • GoodJob
  • 0

  • ゲスト
  • 8:ゲスト
  • 2007/12/14 20:18

歴史的経緯による

  • GoodJob
  • 0

前へ 1 次へ

コメントする

[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。

[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。

ゲスト投稿者:ゲスト:

関連ソースコード・ノウハウを登録

PDFLib | A library for processing PDF on the fly プレゼン公開・共有サイト handsOut.jp オープンタイプ株式会社 チーム・マイナス6% - みんなで止めよう温暖化

ブックマークコメント