すべてのプログラミング フォーラムには、何百もの配列トピックがあります。たぶん数千。毎日。しかし、それらのどれもこの側面に触れていません。
配列は 0 からインデックス付けされるため、1 から始まるデータにアクセスすることがよくあります。その理由は、ゼロ フィールドは通常、多数の名前付き変数の代わりに、列または行の合計、およびステータス フラグを保持するのに適しているためです。の 4 番目のエントリは 3 ではなく 4 として表示されるため、常に読む方が理にかなっています。建物の 1 階を「1」、次の階を「2」または 2 階と呼ぶ人もいます。地上 1 階を 1 などと呼ぶ人もいます。このため、人々は建物の中で迷子になります。要求の厳しい CAD の世界では、思考の流れを妨げるものはすべて、どんなに些細な混乱であっても、収入の損失に等しいものです。したがって、私は自然な概念モデルにできるだけ近い配列が好きです。
最初の質問は..これは受け入れられる慣行ですか?もしそうでなければ、なぜですか?自分のコードを読んでいるのは私だけですが、それを共有することはめったにありません。慣習から離れすぎないことに価値があると思います。少なくとも私が血まみれの道を歩むなら、その理由は明らかです。
さらにいくつかの質問があり、それらは独自のスレッドに値する可能性がありますが、それらはすべて何らかの形で互いに関連しているため、それらもレイアウトします.
また、ソフトウェアが使用される現実の世界では、これらのケースが発生しないため、配列の一部が冗長であることがよくあります。質問 2: 大きな配列を使用するのではなく、データの使用を再考して、これらのデッド エリアが最小限に抑えられる、同様の小さな配列にすることは許容される慣行ですか? 上記の質問にどのように関連するかというと、これは、それ自体が不要になる可能性のあるゼロ-ゼロ フィールドのさらに別のセットになるということです。「記憶はたくさんある」という感情があることは知っていますが、どういうわけか、私はただのずさんな考えにすぎません。
そして私の最後の質問: 時折、インデックスにオフセットを追加して、ユーザー履歴を処理する余分な次元**に対応しています
printf(" %s \t %d \n", foo[i],bar[i][c]);
printf(" %s \t %d \n", foo[i],bar[i][c+1]);
printf(" %s \t %d \n", foo[i],bar[i][c+2]);
だから私はここでいくつかのことを心配しています. アクセスごとに計算を行うのはスピードヒットですか? モバイル アプリの世界では、これは回避できた可能性のあるバッテリーの使用量を表しているのでしょうか?
** これを読んでいる初心者のために、3 次元配列をルービック キューブと考えれば、4 次元以上の配列は簡単に理解できます。あなたが座っている部屋の中にもう1つまたは2つのキューブを横に置くと、4つになります. 部屋でいっぱいの建物は 5 番目であり、建物の都市ブロックが 6 であり、都市の州が 7 であり、国などがそれ以上です。