配列

配列について学んでいきましょう。


配列

ACSを作っているときに、変数を100個作らなければならない時があるかもしれません。
このときに、

int a1,a2,a3,...(以下略)

と宣言しているのでは大変ですね。
配列を使うと簡単に複数の変数を宣言することができます。
配列の一般的な宣言方法を紹介します。

変数の型) (配列の名前[ 要素の個数 ];

具体的には

int a_array[4];
//要素が4個で変数の型がint型の配列a_arrayの宣言。

と書きます。例のように配列を宣言したとき、実際にには次の様なint型変数が宣言されます。

1個目の変数 a_array[0]
2個目の変数 a_array[1]
3個目の変数 a_array[2]
4個目の変数 a_array[3]

ちなみに、配列は英語でarrayと呼びます。(a_arrayとしている意味は特にありません。)

この様な変数をこの配列(今回はa_array)の要素と呼びます。a_array自体は配列を指します。
角括弧(正式には添え字演算子)に番号(添え字)を入れることで配列の要素を呼び出しますが、
1個目の要素の指定が0から始まっていることに注意しましょう。
つまり配列の要素の番号は、

(配列名)[ "何番目の要素か" - 1]

になっています。

要素を指定する番号に範囲外の値(-1や4など)を入力したときの動作は恐らく保証されませんし、
そうなることのないようにACSを作りましょう。

配列の要素を使うときは

a_array[3] = 2;
a_array[2] = 5 * a_array[3];

のように、要素を指定する番号を記す以外は、普通の変数のように使えます。
また、要素を指定する番号を入力する部分は、整数値でなくても変数を持ってくることもできます。
つまり

int n = 0;
a_array[n] = 2;

と記述しても問題はありません。
ただし、変数を宣言するときに要素の個数を宣言するときは定数で宣言しなければなりません。
(変数単独でなく数式を入れることも可能です。)

そのほかに、宣言時の注意点ですが、次の例を見て下さい。


#include "zcommon.acs"

int va[5];
//宣言場所に注意

Script 1 ENTER
{
//...省略
}


このように、配列はScriptなどの外に宣言して下さい。
詳しいことは、スコープというものを紹介するときに書きますが、とりあえずこの原則を守って下さい。
また、配列を使いたい行よりも前に配列を宣言して下さい。
これはなんとなくわかると思いますが、コンパイラが正常にACSをコンパイルするために必要なことです。

では、配列を初期化する場合はどうなるのでしょうか。
次のACSを見てみましょう。


#include "zcommon.acs"

int va[5] = {3,1,4,1,5};

Script 1 ENTER
{
//...省略
}


このように、"{ }"(中括弧)と","(コンマ)を用いて要素の小さい順から初期化を行います。
(要素数よりも多く初期化をしようとするとエラーになりコンパイルできません。)
次の様なACSも見てみましょう。


#include "zcommon.acs"

int va[5] = {3,1,4};

Script 1 ENTER
{
//...省略
}


宣言した要素数と初期化した値の個数が等しくありません。
このような場合、残りの要素は0で初期化されます。
また、下記のように、初期化指定を無しで配列を宣言した場合、

int a_array[5];

すべての要素は0で初期化されます。

では、実際に例を見てみましょう。


#include "zcommon.acs"

int va[3] = {1,2,3};
//配列vaの宣言(要素数は5)

Script 1 ENTER
{
va[1] = 3;
print(s:"va[0] is ",d:va[0],s:" va[1] is ",d:va[1],s:" va[2] is ",d:va[2]);
}


と表示されます。
printの部分が少し読みにくいですが、配列vaのそれぞれの要素が普通の変数のように使えていることがわかります。

※:配列を宣言するときに、あまりにも多くの要素を作ろうとすると、ゲームが中断されてしまう可能性があります。
(二桁程度なら大丈夫だと思います。)


配列の要素に配列を持ってくることができます。
要素が配列である配列を多次元配列と呼びます。
宣言方法は普通の配列の宣言と似ています。

変数の型) (配列の名前[ 要素の個数1 ][ 要素の個数2 ]...[要素の個数n];

多次元配列の最も簡単な形(というかこれしか使わないと思います)である2次元配列宣言の例を見てみましょう。


#include "zcommon.acs"

int va[3][4];
//要素数が4個で型がint型の配列を要素とし、要素数が3個の配列の宣言。

Scriprt 1 ENTER
{
//省略
}


例のように2次元配列vaを宣言したとき、下の表のように変数が用意されます。

va[0][0] va[0][1] va[0][2] va[0][3]
va[1][0] va[1][1] va[1][2] va[1][3]
va[2][0] va[2][1] va[2][2] va[2][3]

注意点は普通の配列の時と同様です。

では、初期化はどのように行うのでしょうか。
次の例を見てみましょう。


#include "zcommon.acs"

int va[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}};

Scriprt 1 ENTER
{
//省略
}


赤い字の部分のように、2重に初期化を行っていることがわかります。
他にも

int va[3][4] = {{0,1},{2,4,5},{6,7}};

などと宣言すると、宣言されていない部分の要素は0で初期化されます。
もちろん、初期化を行わなければすべての要素は0で初期化されます。

※:配列はその9の説明の時にもう一度紹介します。


まとめ

・配列とは、変数が複数集まってような物。
・配列のそれぞれの変数の名前を要素と呼ぶ。
・配列の宣言方法は
変数の型) (配列の名前[ 要素の個数 ];
・多次元配列の宣言方法は
変数の型) (配列の名前[ 要素の個数1 ][ 要素の個数2 ]...[要素の個数n];
・要素の呼び出し方は
(配列名)[ "何番目の要素か" - 1]
・初期化をしていない部分は0で初期化される。
・配列は変数のように使用できる。
・要素を指定する番号は0から始まっている。
・要素を指定する番号の部分に変数や式を持ってきてもOK。


Home Back Next