C言語 入門 ~配列編~

スポンサーリンク
スポンサードリンク

配列の基本

配列は、同じデータ型のハコを複数まとめて用意する入れ物のことです。プログラムでは、文字を扱う”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>

(Visited 126 times, 1 visits today)
スポンサーリンク
スポンサードリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサードリンク