コンテンツ
配列の基本
配列は、同じデータ型のハコを複数まとめて用意する入れ物のことです。プログラムでは、文字を扱う”char型”や数字を扱う”int型”という型があります。これらを同時に複数個扱う場合に、同じデータ型であればまとめて表現できたほうが便利な場合があります。
char ch[4];
int in[3];
図の例では、char型のハコを4つ使う、int型のハコを3つ使う、というイメージです。
配列の定義
配列の定義方法
"型名" "配列名" ["数字(要素数)"];
とすることで、配列として定義が可能になります。
ch[4]は、char型の配列で4個分のハコがあります。
in[3]は、int型の配列で3個分のハコがあります。
ここで”ハコ”と表現している部分は、配列の“要素”と呼びます。また、ハコの数を、配列の“要素数”と呼びます。
配列を定義する時に、必ず”要素数”の部分は固定の数字(たとえば、3とか7とか)を入れてください。”何個のハコ”を用意するか?がわからないと、ハコの数を用意できないからです。
配列の要素は、”0番目”からstartします。
今回、”ch[4]”と”in[3]”を定義しましたが、それぞれの要素は次のようになります。
“ch[4]”は、”ch[0], ch[1], ch[2], ch[3]”を定義したという意味になります。
“in[3]”は、”in[0], in[1], in[2]”を定義したという意味になります。
(参考)配列の要素数での注意
配列は要素数が決まっているため、定義されている要素数を超える数値を入力すると、エラーが発生します。例えば、次のような処理はエラーになります。
char ch[4];
ch[10] = 1; /* chは[3]までしか使えないためエラーになります */
配列に値を代入する
配列に値を代入するという処理を、サンプルプログラムで説明します。
Lesson5-1のサンプルプログラム問題<Lesson5_1.c>
【Lesson5-1 問題】
ch[0]~ch[3]にそれぞれ、”0, 1, 2, 3″を代入します。
in[0]~in[2]にそれぞれ、”100, 200, 300″を代入します。
ch[0]~ch[3]それぞれの値と
in[0]~in[2]それぞれの値を、printfで出力してください。
<Lesson5_1.c> サンプルソース
#include <stdio.h>
void main(void)
{
int number;
char ch[4];
int in[3];
ch[0] = 0;
ch[1] = 1;
ch[2] = 2;
ch[3] = 3;
in[0] = 100;
in[1] = 200;
in[2] = 300;
for(number=0;number<4;number++)
{
printf("ch[%d]の値は、[%d] です。\n", number, ch[number]);
}
for(number=0;number<3;number++)
{
printf("in[%d]の値は、[%d] です。\n", number, in[number]);
}
return;
}
Lesson5-1のサンプルプログラム問題<Lesson5_1.c>の実行結果
PS C:\Cprogram> gcc lesson5_1.c -o lesson5_1.exe
PS C:\Cprogram> .\Lesson5_1.exe
ch[0]の値は、[0] です。
ch[1]の値は、[1] です。
ch[2]の値は、[2] です。
ch[3]の値は、[3] です。
in[0]の値は、[100] です。
in[1]の値は、[200] です。
in[2]の値は、[300] です。
プログラムの9~16行目が、配列に値を代入している処理になります。それぞれの配列の要素に値を直接代入しています。
プログラムの20,25行目では、繰り返しのfor文を使って、配列の要素をそれぞれprintfを使って出力しています。配列の要素数が決まっているので、要素数を繰り返し処理の条件に使えば、配列に代入した値の出力が可能になります。
配列の初期化
<Lesson5_1.c> サンプルソースでは、配列の要素それぞれに1行ずつ値の代入をしましたが、初期化処理で値の代入が可能です。ただし、初期化で代入できるのは、配列を定義(宣言)したときのみとなります。
配列の初期化 定義方法
"型名" "配列名" ["要素数"] = { 初期値1, 初期値2, ・・・(要素数分) };
Lesson5-2のサンプルプログラム問題<Lesson5_2.c>
ch[4]とin[3]を配列の初期化で初期化処理を行ったサンプルソース<Lesson5_2.c>を以下に記載します。
<Lesson5_2.c> サンプルソース
#include <stdio.h>
void main(void)
{
int number;
char ch[4] = { 0, 1, 2, 3 };
int in[3] = { 100, 200, 300 };
for(number=0;number<4;number++)
{
printf("ch[%d]の値は、[%d] です。\n", number, ch[number]);
}
for(number=0;number<3;number++)
{
printf("in[%d]の値は、[%d] です。\n", number, in[number]);
}
return;
}
Lesson5-2のサンプルプログラム問題<Lesson5_2.c>の実行結果
PS C:\Cprogram> gcc lesson5_2.c -o lesson5_2.exe
PS C:\Cprogram> .\Lesson5_2.exe
ch[0]の値は、[0] です。
ch[1]の値は、[1] です。
ch[2]の値は、[2] です。
ch[3]の値は、[3] です。
in[0]の値は、[100] です。
in[1]の値は、[200] です。
in[2]の値は、[300] です。
配列の初期化の注意点
配列の初期化の時には、要素数と同じ値を初期値として定義を行います。そのため、配列のすべての要素の初期値が決められない場合は、この初期化方法は使わず、それぞれの要素に値を代入していくべきです。ただし、例外ケースがあるので解説します。
たとえば、以下のようなプログラムを書いた場合、ch[3]の値はどうなるでしょうか?
char ch[4] = { 0, 1, 2 };
このケースは、要素数が[4]になっているにも関わらず、初期化する値が3つしかありません。しかし、C言語の配列は、初期化されなかった要素には、”0″が代入されるようになっています。※ただし、”0″以外の値にはできません。
配列 演習問題
配列の初期化に関する演習問題 Lesson5P1.c
char ch[4] = { 4, 3 };
int in[3] = { 100 };
で初期化した場合の
ch[0]~ch[3]それぞれの値と
in[0]~in[2]それぞれの値を、printfで出力してください。
Lesson5P1.cのサンプルプログラム
#include <stdio.h>
void main(void)
{
int number;
char ch[4] = { 4, 3 };
int in[3] = { 100 };
for(number=0;number<4;number++)
{
printf("ch[%d]の値は、[%d] です。\n", number, ch[number]);
}
for(number=0;number<3;number++)
{
printf("in[%d]の値は、[%d] です。\n", number, in[number]);
}
return;
}
Lesson5P1.cの実行結果
PS C:\Cprogram> gcc lesson5P1.c -o lesson5P1.exe
PS C:\Cprogram> .\Lesson5P1.exe
ch[0]の値は、[4] です。
ch[1]の値は、[3] です。
ch[2]の値は、[0] です。
ch[3]の値は、[0] です。
in[0]の値は、[100] です。
in[1]の値は、[0] です。
in[2]の値は、[0] です。
PS C:\Cprogram>