C言語の配列について最低限の知識

C言語初級カテゴリのロゴ画像 C言語初級

C言語で配列を学ぶ前に最低限知っておきたい用語と基礎知識を解説します。

配列についての簡単な説明とそのメリット

配列も変数である。
変数名に添え字(そえじ)と呼ばれる番号が振られ、その添え字を元に要素を特定する。

配列のメリットは、数値や文字データの集まりをまとめて管理できること。
後述するループ処理と組み合わせると利用価値が高まる

配列の宣言方法

例として整数型(int型)の配列を宣言してみる

aという名前の配列を5つ分宣言する

int a[5];

配列への代入

添え字(そえじ)と呼ばれる数値を変数名の後に[]付きでつけているだけで、配列へのデータ代入方法は基本的に変数と同じ。(ただし、文字列の代入は別)

例えば、先述のように int a[5]; と宣言した場合

a[0] = 10;
a[1] = 20;
a[2] = 30;
a[3] = 40;
a[4] = 50;

のように5つ分の要素を代入できる。

配列の添え字について

添え字は0から始まるため、int a[5]と5つ分宣言した場合、実際に利用できる配列はa[0], a[1], a[2], a[3], a[4]である。a[5]は使用できない

上記 int a[5]; と宣言したときa[5]は使用できないの部分の補足ですが、わたしが利用しているgccコンパイラでは次のプログラムがすんなりとコンパイルできてしまいました。

#include <stdio.h>
int main(void)
{
	int a[5];
	a[0] = 10;
	a[1] = 20;
	a[2] = 30;
	a[3] = 40;
	a[4] = 50;
	a[5] = 60;

	printf("a[5] = %d\n", a[5]);

	return 0;
}

しかも実行すると

a[5] = 60

と表示されました。
一見するとプログラムが動いてしまうので問題なさそうですが、これは安全なプログラムではありません。宣言した配列の要素数を越える領域へのアクセスは動作しているコンピュータへの不正なアクセスとなりコンピュータが動作不安定となるため、絶対に利用しないでください。

配列の宣言と同時に値を代入する方法

配列の宣言と代入を同時に記述することもできる。

int a[5] = {10, 20, 30, 40, 50};

上記は、

int a[5];
a[0] = 10;
a[1] = 20;
a[2] = 30;
a[3] = 40;
a[4] = 50;

と同じ意味である。

配列の宣言と同時に代入を行う場合は、[ ] 内に記述する要素数を省略することもできる

int a[] = {10, 20, 30, 40, 50};

サンプル1:配列に代入した数値を表示させてみる

hairetu_kihon1.c

/* 配列を使ったサンプル1 */

#include <stdio.h>
int main(void)
{
	int a[] = {10, 20, 30, 40, 50};

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

	return 0;
}

実行イメージ

a[0] = 10
a[1] = 20
a[2] = 30
a[3] = 40
a[4] = 50

サンプル2:配列はループと組み合わせて利用すると威力を発揮する

配列の要素に対して連続した処理を行いたい場合、添え字部分には定数ではなく、変数を用いた方が配列を扱いやすい。
一般には、以下の例のようにループカウンタ変数を添え字に利用する

hairetu_kihon2.c

/* 配列を使ったサンプル2 */

#include <stdio.h>
int main(void)
{
	int a[] = {10, 20, 30, 40, 50};
	int i;		/* ループのカウンタ用及び配列の添え字用 */

	for(i=0; i<5; i++){
		printf("a[%d] = %d\n", i, a[i]);	/* a[i]と記述することでi=0のときa[0]となる */
	}

	return 0;
}

実行イメージ

a[0] = 10
a[1] = 20
a[2] = 30
a[3] = 40
a[4] = 50

以上、C言語の配列について最低限の知識でした。

配列については以下も併せてご覧ください。

コメント

タイトルとURLをコピーしました