next up previous contents
Next: 17.3 変数の初期化と配列の初期化 Up: 17. 配列 I Previous: 17.1 配列の宣言

17.2 配列の操作

配列は多くの値を格納できる変数であり、変数の集合と考えることも出来る。この意味 で、配列のうち一つの値を格納出来る部分を配列の要素という。 配列に値を格納したり、取り出したりするためには、この要素にアクセスする方法が 分かればよい。配列の要素を指定するには、次のように行う。

    int     rei[10];
        ...
    rei[0] = 3;
    rei[5] = 10;

\epsfile{file=array1}

即ち、配列[要素番号] で指定する。この時、注意するのは、10 個の大きさ の配列を宣言したとき、要素の数は 10 個なのだが、C 言語では配列は必ず 0 番から始まる規則 になっているので、 要素番号は 0 番から 9 番までであるという事である。 一般に、n の大きさの配列を宣言すると、要素番号は、 0番から n-1 番までである。 ( 要素番号の事を、C 言語では、添字という。 )

配列の添字を用いて、要素を指定した場合、通常の変数とまったく同一に扱うことが 出来る。また、添字は、整数なので、整数式を用いることが出来る。

    int     i, rei[10];
        ...
    for (i=0; i<10; i++){
        rei[i] = 0;
    }

この例は、配列 rei の全ての要素に 0 を代入している。

    char    i, str[26];
        ...
    for (i=0; i<26; i++){
        str[i] = 'a' + i;
    }

上の例では、文字型の配列 str の要素に 'a' から 'z' までの文字を順に代入 している。 また、次のように書き換える事も出来る。

    int i;  char str[26];
        ...
    str[0] = 'a';
    for (i=1; i<26; i++){
        str[i] = str[i-1] + 1;
    }

上の例で注意することは、ループが i=1 から始まっていることである。 これを、i=0 から始まるように書くと、str[i-1] が、最初のループ で str[-1] となり、深刻な事態を引き起こす。配列の範囲を越えた添字の 指定は絶対にしてはならない。

また、次の例は誤りである。
間違った例
    int rei1[10], rei2[10];
        ...
    for (i=0; i<10; i++){
        rei1[i] =  i;
    }
    rei2 = rei1;

この例の誤りは、rei2 = rei1 である。配列名は、変数ではないので、 配列から配列への直接代入はできない。代入できるのは、配列の要素のみである。 従って、配列 rei1 の中身を全て rei2 にコピーしたい場合は、 次の例のようにループを使って 要素から要素へとコピーするようにしなければならない。

正しい例
    int rei1[10], rei2[10];
        ...
    for (i=0; i<10; i++){
        rei1[i] =  i;
    }
    for (i=0; i<10; i++){
        rei2[i] = rei1[i];
    }



Noriyo Kanayama