C言語

複数の値をまとめて扱う配列の使い方

今までのサンプルプログラムでは、1個か数個の変数だけしか使用していませんでしたが、プログラムによっては、たくさんのデータを扱いたい場合があります。
例えば、100人のテストの点数を変数に記憶させたい場合、今まで学んだ内容では、100個の変数を宣言して使用することになってしまいます。

100個変数を宣言

int test1;
int test2;
int test3;
 :
int test100;

このように、100個の変数を宣言しなければなりません。
このようなときには、配列というしくみを利用します。
配列は、同じ型名の変数をまとめて記憶するという便利な機能になります。

配列の仕組み

数値を記憶する(変数)と基本的な演算で、コンピュータのメモリは、ロッカーが膨大に並んでいるようなイメージと紹介しました。
このロッカーが一列に並んでいるところをイメージするとよいかもしれません。
ロッカーに名前を付けることで、変数が利用できることを学びました。配列は、この名前を付けたロッカーから指定した数のロッカーを使用することができます。
配列には0から始まる番号があり、番号を指定することで、そのロッカーに出し入れできるようになります。

配列の宣言

配列は、次のように宣言して使用します。

配列の宣言

型名 変数名[ 要素数 ] ;

変数の宣言と同様ですで、後に[ 要素数 ]が必要となる違いがあるのみです。
使用する型名と、変数名を指定して、[ ] の中に要素数を指定します。この要素数とは、作られる変数の数です。ここで指定した数だけ、変数が作られます。
指定できるのは、整数値のみで、宣言時に、変数を指定することはできません。

int test[ 5 ];

このように宣言すると、次のような変数が作られることになります。

test[0]
test[1]
test[2]
test[3]
test[4]

[ ]の中の番号を添字(そえじ)または、インデックスと呼ばれています。
C言語では、配列の添字は、0からはじまります。このため、最後の添字は、「要素数 - 1」となります。

配列の使い方

宣言した配列に値を格納したり、使用したりするやり方を学びます。

配列へ値を代入する場合は、次のような構文になります。

構文

変数名[ 添字 ] = 式 ;

今までの変数の代入と変わりありません。変数名のどの場所かを[ ]で指定し、値を代入します。
配列の変数に値を入れて、配列に入れた値を表示するサンプルプログラムを次に示します。

#include <stdio.h>

int main(void)
{
    int number[3];
    int i;
    
    number[0] = 10;
    number[1] = 20;
    number[2] = 30;

    for( i = 0; i < 3; i++ )
    {
        printf("%d", number[i]);
    }
    return 0;
}

実行結果は、次のようになります。

実行結果

10
20
30

はじめに、配列の各要素に値を代入します。
次のfor文では、i の値が 0~2までをループします。
printf関数では、配列の添字に変数の i を使用しています。配列の宣言時、要素数に変数を使用できませんが、宣言した後は、添字には、変数が使用できます。
このため、ループするたびに、iの値が変化するので、number[0]~number[2]に代入した値が表示されました。このように、変数名[添字]を指定することで、配列の変数の値を出力することができます。

指定した要素数を超えて添字を指定してしまった場合は、コンパイラはエラーとならず、想定外の場所に読み書きしてしまいますので注意が必要です。
例えば、サンプルプログラムでは、number[2]までなのにも関わらず、number[3] = 10; などとしてしまうと、予期しない動作となります。

配列の初期化

数値を記憶する(変数)と基本的な演算で、 変数の初期化について学びましたが、配列の初期化も、変数と同様に、宣言と同時に値を代入できます。

構文

型名 変数名[ 要素数 ] = { 値0, 値1, ・・・ } ;

{ } で囲んだ中に順番に、カンマ( , )で区切って、数値を並べます。
要素数すべての数値を記述する必要はありません。要素数より少ない場合は、残りの変数には、0が代入されます。
配列を初期化して表示するサンプルプログラムを次に示します。

#include <stdio.h>

int main(void)
{
    int array[5] = { 10, 20, 30 };

    printf("[0] = %d¥n", array[0]);
    printf("[1] = %d¥n", array[1]);
    printf("[2] = %d¥n", array[2]);
    printf("[3] = %d¥n", array[3]);
    printf("[4] = %d¥n", array[4]);

    return 0;
}

実行結果は、次のようになります。

実行結果

[0] = 10
[1] = 20
[2] = 30
[3] = 0
[4] = 0

このように、宣言と同時に初期化した場合、初期値が、配列の要素数より少ない場合、残りにはすべて0が代入されていることがわかります。

サンプルプログラムでは、配列の初期値を省略しましたが、配列の初期化時に、要素数を省略することもできます。

int array[ ] = { 10, 20, 30 };

このうに宣言した場合、指定した数値の数だけの要素数が確保されます。この場合だと、3つの値を初期化していますので、array[3]となります。

配列の初期化では、{ } を使用して一度に配列の値を代入していましたが、これは、宣言時にしかできないことです。
宣言した後に代入したい場合は、1つずつ代入します。

array[ ] = { 1, 2, 3, 4, 5 } ; ←このように代入できません。

配列については以上です。
次は、この配列の応用として、多次元配列を学びたいと思います。

多次元配列の仕組み

-C言語