配列

配列とは、高水準言語のソースコード上で数値など、複数の要素を格納できる仕組みのことです。

配列は、変数*の集合のようなものです。

ここでは、配列の要素がすべて同じデータ型である最も基本的な配列について説明します。

配列の宣言

配列の宣言とは、配列の名前とデータ型を指定して、その配列をソースコード上で使えるようにすることです。

例えば、以下は、あるプログラミング言語において、intという整数型を使って、5個のintの値を格納できる配列aを宣言する方法です。

int a[5];

配列への値の代入

上記の配列aに値を代入する場合は、以下のようにします。

a[0] = 2;
a[1] = 4;
a[2] = 6;
a[3] = 8;
a[4] = 10;

赤字は、配列のインデックスと言います。インデックスを使って、配列のどの位置に値を代入するかを決められます。インデックスは、0から始まります。そして、この場合は、5個の配列なので、インデックスは、0~4を指定できます。

配列のインデックスは、変数*にすることもできます。

int i = 2;
a[i] = 6;

なお、宣言した配列に初めて行う代入のことを配列の初期化と言います。

配列の宣言と初期化を同時に行う

上記のプログラミング言語では、以下の方法で配列の宣言と初期化を同時に行えます。

int a[5] = {2, 4, 6, 8, 10};

もしくは、以下のようにします。

int a[] = {2, 4, 6, 8, 10};

配列の要素の参照

ソースコード上で配列に代入した値を利用することを配列の要素の参照と言います。

例えば、以下は、上記と同じプログラミング言語において、変数*bに配列a[2]の値を代入して、配列a[2]の要素を参照する例です。

b = a[2];

配列の仕組み(ハードウェアレベル)

配列は、ハードウェアレベルでは、以下の仕組みで実現されています。

・配列の各要素の実体は、あるメモリアドレスに割り当てられたメインメモリです。配列の宣言を行うことでそれらのメインメモリが確保されます。

・配列の各要素用に確保するメインメモリのバイト数は、配列のデータ型で決まります。

・インデックスがiの配列の要素のメモリアドレスは、インデックスが0の配列の要素のメモリアドレスをA、配列のデータ型のバイト数をBとすると、「A+B ×i」と表せます。

・配列の要素のメモリアドレスの指定は、例えば、ベースレジスタとインデックスレジスタを利用したアドレッシングモードを利用します。ベースレジスタに上記のAを代入し、インデックスレジスタに上記のB ×iを代入します。インデックスレジスタの値にBを加算命令で加算することで連続した配列の要素に効率良くアクセスできます。

・配列への値の代入は、メインメモリへの転送命令に対応します。

・配列の要素の参照は、ロード命令に対応します。