私は答えを見つけようとしましたが、ゼロ以外のインデックスで始まる配列を実現する方法の答えがありました。このようパスカルなどの一部の言語では、デフォルトでこれを提供し、例えば、私は常に思ってきた0以外のインデックスで始まる配列の目的は何ですか?
var foobar: array[1..10] of string;
ような配列を作成することができますなぜあなたは0で起動しない配列インデックスを持ちたいでしょうか?
初心者が1から始まり、最後のインデックスが配列のサイズであることはよく知られているかもしれませんが、長期的には、0から始まる値に慣れるべきです。
私が考えることのできる別の目的:場合によっては、インデックスは実際にはそれぞれの配列エントリに含まれているものを表すことができます。たとえば、大文字をすべて配列に入れたい場合は、それぞれの文字のASCIIコードをインデックスにすると便利です。しかし、ちょうど一定値を減算するのはかなり簡単です。また
#define ASCII_SHIFT 65
main()
{
int capital_letters[26];
int i;
for (i=0; i<26; i++){
capital_letters[i] = i+ASCII_SHIFT;
}
printf("%c\n", capital_letters[67-ASCII_SHIFT]);
}
、私はあなたがしたい場合は、ハッシュテーブルを使うべきだと思う:この例では、(Cで)単純にすべて大文字を取得し、ASCIIコード67と手紙にアクセスします。このような何かを行うことができます何らかの種類のキーでエントリにアクセスする。
誰かがレトルトする可能性があります:インデックスが常に0で始まるのはなぜですか?まあ、これはずっと簡単です。配列を宣言するときに1つのインデックスを入力するだけで、より高速に処理できます。また、最初のエントリが配列[0]であり、最後のエントリが配列[length_of_array-1]であることが常に確認できます。他のデータ構造も0から始まるのが一般的です。たとえば、バイナリファイルを読み込んだ場合は、最初のバイトではなく0バイト目から始めます。
なぜ、いくつかのプログラミング言語がこの「機能」を持っているのですが、C/C++などの言語でこれを達成する方法を尋ねる人々がいる理由は、非ゼロのインデックスで始まる配列は、有用であるか、あるいは、何かを0から始まる配列で単純に行うことはできません。
あなたが推測しているように、私は配列が初心者にはもっと理解しやすいと思っています。 – Krule
古いことわざ:「あなたは決して持っていなかったこと、あなたは決して逃さない」。非ゼロベースのインデックスは、多くの用途を持っています(単に「初心者向け」ではありません)。 Cは低レベルの言語であり、効率を考慮して設計されているため、0ベースの配列インデックスの制限があります。より高いレベルの言語はこの制約を心配する必要はありません。 MATLABが1ベースの配列インデックスのみをサポートしているという事実を考えてみてください。 –
ゼロベースの配列を使ってすべてを行うことができるというメリットは、すべてがマシンコードで実行できることです。 – Apalala