コンピュータでは,データを記憶する場所には,プログラマーが名前を付ける必要がある.
そうしないと,プログラマーは記憶したデータを取り扱うことができない.これまでに,
諸君は単純型と言われるデータ構造を学習した.それを使うためには,記憶するデータの
型と変数名をプログラムの最初に記述する.次のようにである.
int a;
double x;
このようにいちいち名前を指定する方法だと,大量のデータを処理することは不可能であ
る.たとえば,100万個の名前を付けるだけで,大変である.困った,さあどうするか?
先ほどのデータ構造--単なる変数--で,大量のデータを扱うことは不可能である.なぜ
ならば,単なる変数で一度に確保できるメモリーの領域は1個であるため,全てのデータ
に異なった名前を付けることは不可能となるからである.ようするに,100万個のデータ
を扱う場合,それだけの変数名を用意するのはナンセンス.そこで,複数の同じ型のデー
タを取り扱うために,配列というデータ構造が発明された.
これは,同じ型のデータを任意の個数宣言し,配列名と自然数でアクセスすることができ
るようにしたものである.配列宣言を使う場合の宣言は,型名と配列名,そしてサイズを
書く.
|
書式(配列の宣言方法)
データ型名 配列名[サイズ];
データ型名 配列名[サイズ][サイズ];
データ型名 配列名[サイズ][サイズ][サイズ];
|
具体的には,次のようにする.
int i[10], j[100][100];
こうすると,
-4pt
- 配列名iの整数型のデータ領域が10個用意される.用意されるデータ領域
は,i[0]〜i[9]である.
- 配列名jの整数型のデータ領域が10000個用意される.用意されるデータ領域
は,j[0][0]〜j[99][99]である..
となる.C言語では配列の添字(インデックス)は,ゼロからはじまることに注意が必要で
ある.
C言語では,配列のデータは連続したメモリー領域に格納される.すなわち,先ほどの例
の場合,図1のようにメモリー領域が確保される.連続したメモリー
領域をつかうので,配列へのデータの出し入れは高速にできる.
図 1:
配列のイメージ.データを入れる箱がいっぱいある.ただしひとつの箱の大きさは全
て同じで整数を格納する.
|
配列のサイズが小さい場合,宣言と同時に初期ができる.
int hoge[3]={111,222,333};
int fuga[2][2]={{111,222},{333,4444}};
このようにすると,
|
hoge[0]=111 |
|
hoge[1]=222 |
|
hoge[2]=333 |
|
|
fuga[0][0]=111 |
|
fuga[0][1]=222 |
|
fuga[1][0]=333 |
|
fuga[1][1]=4444 |
|
と初期値が設定される.配列よりも初期値が少ない場合には,残りのゼロに初期化される.
多い場合にはエラーとなる.
配列では,配列名と添え字(インデックス)を指定する--たとえば
i[3]や
j[25][49]--ことにより,記憶領域から値(データ)を入出力できる.
i[3]=5; /* 配列 i[3] に 5 を代入 */
c=j[25][49]; /* 配列 j[25][49] の値を変数 c へ代入 */
配列全体をコピーする場合,要素毎に代入文を実行する必要がある.例えば,サイズ
の配列hoge[][]とfuga[][]があるとする.hoge[][]のデータを
fuga[][]にコピーする場合,次のようにする.
for(i=0; i<=99; i++){
for(j=0; i<=199; i++){
fuga[i][j]=hoge[i][j];
}
}
配列を使う場合,以下のような間違いが多い.気を付けよ.
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成18年12月15日