C#の配列はなぜインデックス0から始まるのか?その理由を解説
配列とメモリアドレスの関係
配列とは、本質的にはメモリ上の特定アドレスへのポインタです。このアドレスが指す先が配列の最初の要素にあたり、インデックスはそこからの「オフセット(相対的なずれ)」として扱われます。実はこの考え方自体は、C言語が誕生する以前から存在していた概念なのです。
例えば、配列の要素がアドレス 0Xff000 から始まり、{35, 23, 67, 88, 90} の5つの要素を持つとします。int型は4バイトで格納されるため、メモリ上では次のように配置されます。
0Xff000 → 35 0Xff004 → 23 0Xff008 → 67 0Xff012 → 88 0Xff016 → 90
つまり、配列へアクセスする際、オフセット「0」の位置がインデックス0(最初の要素)に対応するわけです。これが、配列のインデックスが0から始まる根本的な理由です。
C#におけるゼロ始まりインデックスの概念
C#でも同様に、配列のインデックスは0から始まります。配列の長さとインデックスの関係は以下のように整理できます。
- 配列が空の場合:要素数は0、長さも0
- インデックス0に1つの要素がある場合:長さは1
- インデックス0と1に2つの要素がある場合:長さは2
- インデックス0、1、2に3つの要素がある場合:長さは3
このように、最後の要素のインデックスは常に「配列の長さ − 1」となり、長さとの整合性が保たれます。
コードで確認するC#の配列
次のコードは、C#の配列がインデックス0から始まることを示しています。
/* インデックス0から開始 */
for ( i = 0; i < 10; i++ ) {
num[ i ] = i + 10;
}ループ変数 i を0から開始することで、num[0] から num[9] までの10個の要素すべてにアクセスできます。もしインデックスが1始まりだった場合、このようなシンプルなループ構造は成り立たず、アドレス計算のたびに余分な調整が必要になります。ゼロ始まりのインデックスは、メモリアドレスの計算を効率化し、プログラム全体のパフォーマンス向上にもつながっているのです。
-
Pythonのリストにインデックスを使って要素を追加する方法
Pythonのリスト(list)は、順序付けられており変更可能なコレクション型データです。重複した要素も許容するため、Pythonプログラムで最も頻繁に使われるデータ型の一つとなっています。本記事では、インデックス機能を活用してリストに要素を追加する方法を解説します。要素を追加する前に、まずインデックスを使ってリスト内の要素にアクセスする基本的な方法を確認しておきましょう。インデックスを使ったリスト要素へのアクセスリスト内のすべての要素にはインデックスが割り当てられており、これによって要素の順序が保たれています。インデックスを指定することで、任意の位置にある要素へアクセスできます。スライス表記
-
Bash配列の使い方を徹底解説!作成・ループ・追加・削除の実例付きガイド
配列(Array)とは、複数の要素をまとめて管理できるデータ構造です。Bashでは、文字列や数値など、異なる型の要素を1つの配列に混在させて格納することも可能です。 本記事では、Bashにおける配列の作成方法と基本的な使い方を解説します。さらに、ループ処理、要素の出力、配列サイズの取得、内容の変更といった配列操作についても、具体例を交えながら詳しく見ていきましょう。 Bashで配列を作成する方法 Bashで配列を作成するには、主に2つの方法があります。 declareキーワードを使う方法 declare -a my_bash_array このコマンドを実行すると、「my_bash_array