の値を最初に取得するために配列[0]に言及する理由は何ですかarrarys
。最初の値を取得するために arrary[1] を使用しない理由。Arrary[1] を使用するとプログラマーにとっては簡単ですが、なぜ array[0] を使用するのか
2 に答える
最初の配列インデックスとして 0 を使用する慣例は、C にまでさかのぼります。C では、概念としての配列は、基礎となるメモリ モデルに非常に緊密に結合されていました。配列は、割り当てられたアドレスから始まる、文字どおりメモリ内の一連の値でした。で。この配列からアドレスを取得するには、その値をポインターとして取得し、ポインター値をインクリメントして、その場所のメモリ内の内容を確認します。逆参照する前にこの「ポインタ」に 0 を追加すると、配列の最初の項目が得られます。したがって、最初に 0 を使用するのが自然でした。 2) 割り当てごとにアイテム スペース全体を無駄にします。また、3 つ目の利点もありました。配列に 256 のエントリがある場合は、1 バイト (0 から 255 までしか保持されません) でインデックスを付けることができますが、配列が 1 から始まる場合は、
Java や C# などの言語、および C の構文と思考モデルを継承する Javascript も、同じ理由で 0 インデックス付き配列を使用します。一貫性は強力です。
対照的に、Lua などの一部の言語は、「直感的に理解できる」ことを目標としており、1 から開始します。
どのプログラミング言語で?配列が 1 からインデックス付けされるプログラミング言語があります。配列が 0 からインデックス付けされるプログラミング言語があります。配列が任意のユーザー定義値からインデックス付けされるプログラミング言語があります。
低レベル言語0
では、ハードウェア レベルでは配列の最初の要素が0
メモリ内の配列全体の先頭からバイト オフセットに配置されるため、開始インデックスで使用されることがあります。これにより、さまざまな配列要素のバイトオフセットを計算するための非常に単純で効率的な式が可能になります。たとえば、配列の i 番目の要素のバイト オフセットはi * element_size
です。このような単純な計算 (コンパイル時の定数による乗算など) は、特定のハードウェア上で単一のマシン命令によって実装できるため、配列へのアクセスが特に効率的になります。