int tempA, tempB
ここでA地点とB地点の間の3地点、C〜Eについてもデータが欲しくなりました。同じように変数を宣言すると
int tempA, tempB, tempC, tempD, tempE
変数が多くなってきました。ちょっと面倒ですね。まだこのくらいなら良いのですが、100とか200とかの単位になるととても大変です。こんな時に配列を使うのです。
上の例ではint型のデータが5つ収まればいいのですよね。そこで、このように宣言するのです。
int temp[5]
今までの宣言と違って [5] というものがついています。これが配列の宣言なのです。これでint型の変数を5つ宣言したのと同じ分だけ「箱」を確保したことになるわけです。
ちなみにこのような1列のデータを表す配列を1次元配列と呼びます。
話は戻って次にA-B間と平行した線上のデータも扱いたいとします。宣言はこんな感じになるでしょう。
int temp1[5], temp2[5], temp3[5]
これもさっきと同じような感じですね。ということはこれも配列で表現できてしまうのでしょうか?答えはイエスです。配列でまとめてしまうと、
int temp[3] [5]
またまた [3] というものがついています。これで3 X 5 = 15個の変数を宣言したのと同じになるわけです。とても便利ですね。1次元配列と同様で、このような平面的なデータを表す配列を2次元配列と呼びます。
これで配列というものがどんなものかイメージは掴めたと思います。
2.配列の宣言
A.1次元配列の宣言
型宣言子 配列名 [要素数] 型宣言子 int,float,charなど全てのデータ型が可能 |
B.2次元配列の宣言
型宣言子 配列名 [要素数] [要素数] 型宣言子 int,float,charなど全てのデータ型が可能 |
C.3次元以上の配列の宣言
3.配列要素の参照
配列名 [添字] 配列名 識別子と同じ規則 |
char string[5] ; /* char型の配列 string の宣言 */
char char1, char2; /* char型の変数 char1,char2 の宣言 */
char1 = string[0] ; /* 配列の最初の要素の値を変数に代入 */
char2 = string[4] ; /* 配列の最後の要素の値を変数に代入 */
上の例で一番最後の要素→添字 = 5と間違いやすいので注意して下さい。添字は必ず0〜(要素数 - 1)だということを忘れないようにしましょう。
2次元配列でも基本的には同じように参照できます。
int data[2] [3] ; /* int型の配列 data の宣言 */
int val1, val2; /* int型の変数 val1,val2 の宣言 */
val1 = data[0] [0] ; /* 1行1列目(=最初の要素)の値を変数に代入 */
val2 = data[1] [2] ; /* 2行3列目(=最後の要素)の値を変数に代入 */
4.配列の初期化
int data[2] ; /* int型の配列の宣言 */
char string[4] ; /* char型の配列の宣言 */
data[0] = 1; /* 各要素に値を代入 */
data[1] = 10;
data[2] = 100;
string[0] = 'a'; /* char型の場合は文字を代入 */
string[1] = 'b';
string[2] = 'c';
string[3] = 'd';
このような書き方ではとてもわかりづらく、間違いの原因となります。そこで次のように宣言と同時に初期化するとより分かりやすくなります。
int data[2] = { 1, 10, 100 }; /* int型の配列の宣言と初期化 */
char string[4] = { 'a', 'b', 'c', 'd' }; /* char型の配列の宣言と初期化 */
ここで要素数を省略することもできます。コンパイルをするときにコンパイラが要素数を自動的にカウントしてくれます。
int data[ ] = { 1, 10, 100 }; /* data[3] と同じ */
char string[ ] = { 'a', 'b', 'c', 'd' }; /* string[4]と同じ */
2次元配列を一度に初期化する場合は、1行目の要素列、2行目の要素列というようにして、各行の要素列を { } で囲んで順に初期化します。
int data[2] [3] = { { 2, 4, 6 }, { 3, 6, 9 } }; /* 2次元配列を宣言と同時に初期化 */
この場合、配列の行を分かりやすくするために改行してあげるとより分かりやすくなります。
int data[2] [3] = { { 2, 4, 6 },
{ 3, 6, 9 } }; /* 改行して行別にする */
2次元配列でも要素数を省略できます。ただし、一番右の列を表す添字だけは省略できません。
int data1[ ] [3] = { { 2, 4, 6 },
{ 3, 6, 9 } }; /* data1[2] [3] と同じ */
int data2[2] [ ] = { { 2, 4, 6 },
{ 3, 6, 9 } }; /* コンパイルエラーになる */