C言語 配列 【基礎 第12回】

この記事は2013年5月31日に書かれたものです。内容が古い可能性がありますのでご注意ください。


配列

■配列とは

同じデータ型のものを複数扱う場合、それぞれ変数を宣言しますが、
それでは管理がしにくい場合があります。特にデータ型が同じでデータが関連性のあるものであるならば
一括で管理した方が管理が楽になる場合があります。そこで同じ名前で複数の値を格納するために使用されるのが
配列というものになります。
例えば、5人の学生の身長を表示させる場合、今までのやり方では以下のように宣言していました。

#include <stdio.h>
int  main(void){
	int student1 = 180;
	int student2 = 165;
	int student3 = 171;
	int student4 = 168;
	int student5 = 173;
	printf(“%dn”, student1);
	printf(“%dn”, student1);
	printf(“%dn”, student1);
	printf(“%dn”, student1);
	printf(“%dn”, student1);
	return(0);
}

変数を5回宣言し表示処理を5回記述しています。
今回は5人ですが10人20人となると表示のprintf文を記述するだけでも手間がかかります。
そこで配列を使用することで少し楽に表示させます。

#include <stdio.h>
int  main(void){
	int i;
	int students[5] = { 180, 165, 171, 168, 173};
	for( i = 0; i < 5; i++){
		printf(“%dn”, students[i]);
	}
	return(0);
}

前頁のコードの結果もこのコードの結果も最終的な結果は変わりませんが、コード量や表示の際の手間に関しては
配列を使用した方が楽になります。

◆配列の書式

では順に見ていきます。
配列もデータの集合体であるのでデータ型の指定が必要です。C言語の場合は同一のデータ型しか配列には
格納できません。
配列を宣言するには以下のようにします。前頁のコードでいうと4行目のところですね。

データ型  配列名[要素数];

まず格納するデータの型を指定し、その次にはその配列の識別名を指定します。このとき格納するデータの数を
指定するために要素数を「[」「]」で囲みます。宣言の時に指定する要素数のところは定数でなければなりません。
先ほどのコードでは5個の整数値のデータを格納するための配列でしたので以下のようにしていました。

int students[5]

配列へのアクセス

上のようにして配列の宣言はできますが、中のデータを取り出したりするにはデータを識別する必要があります。
C言語では配列の要素を識別するために添え字と呼ばれる整数値を使用します。
先頭のデータは添え字「0」となり次のデータは先頭のデータから1つ後ろということで「1」その次は「2」となります。
そこで気を付けなければならないこととして要素数を5とした場合、データを表すための添え字の番号は「4」が最後の
番号となります。配列の要素外のところを指定した場合はどうなるかわかりません。もしかすると他の変数が使用している
領域を指してしまう可能性もあるため注意する必要があります。

<h3<◆配列の初期化

配列を宣言して添え字でデータにアクセスすることは先ほど説明しました。
しかし中に何も格納していない段階でアクセスしても通常の変数同様に値は不定となります。
そこで配列の値を使用するには初期化を行う必要があります。初期化の方法にはいくつかあります。
まず宣言と同時に初期化する方法です。

int students[5] = { 180, 165,171, 168, 173};

c12-1

「{}」の中に格納する値をカンマ区切りで並べて記述することで先頭から順番に値が格納されるようになります。
「{}」の中の要素数が宣言した要素数よりも少なかった場合は、残りの部分は0で初期化されます。「{}」を
初期化子といいます。ただしこの初期化子を使用できるのは宣言と同時に初期化するときだけです。

int students[5] = { 180, 165,171, 168};		//要素数5の配列に4つの要素だけ指定

c12-2

配列をすべて0で初期化するには以下のように行います。

int students[5] = { 0 };
int students[5] = {};		//こちらはコンパイルエラーとなります。

また要素番号を指定して個別に初期化することもできます。
先ほどの例を書き換えると以下のようになります。

int students[5] = { 180, 165,171, 168, 173};

書き換え

int students[5];
students[0] = 180;
students[1] = 165;
students[2] = 171;
students[3] = 168;
students[4] = 173;

■配列へのアクセス

配列を使用することで同一の識別子で添え字により格納されている
各データにアクセスできるようになります。これにより配列のデータを表示させたりする場合に別々の変数を用意するより
扱いやすくなります。4ページ前のコードを見ると各生徒の身長を表示させる際に繰り返し文を使用することで
printf文を5回記述する必要がなくなっています。for文で添え字を1ずつ増やせば前から順番に表示される形となります。
宣言時には変数を添え字の部分に使用できませんが、データにアクセスする際には変数で指定できます。
なのでこういった使い方ができます。

for( i = 0; i < 5; i++){
	printf(“%dn”, students[i]);
}

初期化の時に格納する値に関しても規則性などがあるならfor文を使用することで
簡単に値を代入することができます。
次のページのコードを見て下さい。

#include <stdio.h>
int  main(void){
	int i;
	int num[5];
	for( i = 0; i < 5; i++){
		num[i] = (i + 1) * 2;
	}
	for( i = 0; i < 5; i++){
		printf("要素番号%dは%dn", i, num[i]);
	}
	return(0);
}

~~~~実行結果~~~~
要素番号0は2
要素番号1は4
要素番号2は6
要素番号3は8
要素番号4は10
~~~~~~~~~~~~

配列の各要素にデータが格納されているのが確認できると思います。
for文では以下のような処理が行われています。
c12-3

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

PAGE TOP