第22章 配列


今回は、「配列(array)」について解説します。 配列については、すでにいろいろなところで出てきています。 まー、復習みたいなものです。

配列の宣言の仕方: 配列のデータ型 配列名[配列の大きさ];

と、いうのはすでに知っていると思います。忘れていたら 今覚えてください。

int a[3];

と宣言するとint型の変数a[0], a[1], a[2]を宣言したことになります。 これらは、「要素(element)」と呼ばれます。 []の中は、0から始まっていることに注意してください。 上のように宣言した場合a[3]は存在しません。

うっかりa[3]を使わないでください。

さらに、質(タチ)が悪いことにa[3]を使っても、 コンパイラは注意してくれません。

これは、間違ったプログラムですが・・・

コンパイラは、何の注意もしてくれません。

それどころか、実行しても一見正常に見えます。 これは、たまたまa[3]に相当するところのメモリが あいていたため、何事もなかったように振る舞っているだけです。 いつも正常に動作するとは限りません。 プログラム中に、こういう間違いがあり 途中から動作が変になったりすると、バグ取りは容易でありません。

さて、次は配列を宣言するときにまとめて、初期化する 方法を示します。しかし、これには少しばかり 予備知識がいります。 配列を初期化するには、配列が 静的変数か、外部変数でなくてはいけません。 詳しくは、あとの章で解説しますが、静的変数は static、外部変数はexternをつけます。
また、2次元配列はa[3][4]などのように表します。

static int a[4][2] = {8, 7, 6, 5, 4, 3, 2, 1};


のように初期化した場合

a[0][0]=8, a[0][1]=7 a[1][0]=6, a[1][1]=5 a[2][0]=4, a[2][1]=3 a[3][0]=2, a[3][1]=1

となります。配列の[]の後ろから回るということを 覚えておいてください。 また、次のような初期化の方法もあります。

static int a[] = {1, 2, 3};

これは、

static int a[3] = {1, 2, 3};

と、同じことです。
さて、文字型配列について考えてみましょう。

static char a[] = {'A', 'B', 'C', 'D'};

は、先ほどの知識でa[0]='A', a[1]='B', a[2]='C', a[3]='D' であることがわかります。次に

static char a[] = "ABCD";

としたらどうでしょうか。以前にも少し解説しましたが 文字列の最後には、ヌル文字(\0)がつきます。 従って上の例では、a[0]='A', a[1]='B', a[2]='C', a[3]='D', a[4]='\0'と なります。また、文字列を表すのに次のような表し方もありましたね。

char *str = "ABCD";

これは、str[0]='A', str[1]='B', str[2]='C', str[3]='D', str[4]='\0'でしたね。

あー、頭が混乱してしまう!!!

実は、配列とか文字列についてはもっと頭が混乱することが あります。一度に説明すると頭がパンクするので今回は この位にしておきます。
[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Nov/11/1996 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。