C言語 ~6日目~

配列と文字列について

この章では、C言語の配列と文字列について説明をしていきます。

配列

配列とは「同じ型のデータを複数まとめて扱うことができるデータ構造」のことです。
配列を使うと、複数の連続したデータ構造を一つの変数で管理することができます。

一次元配列

同じ型の入れ物を1列に並べたものを「一次元配列」と言います。

上図は配列のイメージ図です。
同じサイズの箱が一列に並べられ、それぞれの箱には値を格納することが可能です。
それぞれの箱のことを要素と言います。
また、それぞれの箱には0から始まる番号(添字と呼ばれます)が割り当てられています。
添字は0から始まり、配列の要素数よりも1つ小さい値までの範囲になります。
値を各箱に入れる場合や値を参照する場合は、添字を用いて特定の箱を指定します。

配列を使用するためには、次の手順が必要です。

①配列を宣言する

配列を宣⾔するには、データ型と配列名と要素数を指定します。
宣言の方法は以下の通りです。

データ型 変数名[要素数];

例えば、’array’ という名前の要素数5のint型配列を宣言する場合は以下のようになります。

int array[5];

と記述します。

②配列に値を代入する

添字を使用して各要素に値を代入します。

	array[0] = 0;
	array[1] = 1;
	array[2] = 2;
	array[3] = 3;
	array[4] = 4;

配列の各要素には、上記のように、配列名と添字を[](角括弧)で囲んで指定します。

配列の宣言と初期化をまとめて、以下のように記述することもできます。

int array[5] = {0,1,2,3,4};

※int array[5] = {0,1,2,3,4}のように、宣言した要素数に合わせて値を宣言する必要があります。{0,1,2,3,4,5,6}と多くの値を宣言することはできません。

または要素数を省略し

int array[] = {0,1,2,3,4};

と記述します。

では、配列を利用して『特定の地域の過去5日間の最高気温の平均を計算する』サンプルコードを以下に示します。

double degree[5] = {26.0, 29.0,29.8,32.1,35.0};
double sum = 0;
double ave ;

for(int i=0;i<5;i++){
	sum = sum + degree[i];
}
ave = sum / 5;
printf("最高気温の平均値は%lfです\n",ave);

double degree[5] = {26.0, 29.0,29.8,32.1,35.0};この行で配列の初期化をしています。
for文を使用し、配列のi番目の値を取り出し、合計値を計算します。
過去1週間を計算するには、配列を初期化し、for文の条件式を変更するだけです。
この例に見られるように、配列とfor文を含む繰り返し処理は非常に相性が良いです。

実行結果
最高気温の平均値は30.380000です

一方、配列を使う際には、以下のことに注意が必要です。

  • 配列の要素数は宣⾔時に決まり、その後変更することはできません。
  • 配列の添字は0~要素数ー1です。添字の範囲外の値を使い読み書きしてはいけません。

多次元配列

2次元またはそれ以上の次元の配列を多次元配列と呼びます。
ここでは、2次元配列の説明を行います。

	int b[2][3] = { { 0, 1, 2 }, 
	                { 3, 4, 5 }};
	 for(int i=0;i<2;i++){
      	 for(int j=0;j<3;j++){
            	printf("b[%d][%d]=%d\n",i,j,b[i][j]);
        	}
   }

このサンプルコードは、縦に2行、横に3列の2次元配列を示しています。
まず、コードの先頭でデータ型と配列名、そして縦(行数)と横(列数)のサイズを宣言し、初期化します。
イメージ的には、上図の左側のようになりますが、メモリ上は右のメモリマップ上のように割り当てられています。
for文を使用し、縦の各行に対して横のインデックス(添字)を移動させながら各要素の値を表示しています。

【実行結果】
b[0][0]=0 //1行目
b[0][1]=1
b[0][2]=2
b[1][0]=3 //2行目
b[1][1]=4
b[1][2]=5

二次元配列は、表や座標系を表すのによく利用されます。
3次元配列を使用する際は、次元を増やして以下のように記述します。
※しかし、3次元以上はあまり使用しませんので、割愛します。

int array[2][3][4];

文字と文字列

C言語にはchar型という1byteの整数や文字を表すデータ型があります。
’’(シングルコーテーション)で囲み、以下のように宣言できます。

char str = 'A';

メモリ上では’A’のASCIIコード(65)が格納されます。

一方で、C言語では文字列をchar型の配列として扱うという仕組みが存在します。
文字列の最後には0(NULL)が追加され、これを終端文字と言います。プログラムでは、エスケープシーケンス’\0’を使用して表記します。
””(ダブルクォーテーション)で囲み、次のように宣言します。

char a[10] = {'A','B','C','\0'};

{}を使い初期化リストで記載する。※最後に、’\0′(コード:0)を必ず記述します。

char a[10] = "ABC";

この場合は、’\0′(コード:0)はコンパイラが自動的につけてくれるため記述する必要はありません。

char a[] = "ABC";

要素数を省略して初期化することもできます。コンパイラが初期化時に配列の大きさ+1の長さの配列を用意します。

文字列を操作するサンプルコードを以下に示します。

char str[] = "ABC";
int n = 0;
while(str[n] !'\0'){
	n++;
}
printf("length:%d\n",n);

このサンプルコードは、文字列の長さを求めています。
文字列の終端には’¥0’が存在するため、’\0’が出現するまで処理を繰り返します。
このように、C言語における文字列操作は、文字列の終端を示すヌル文字(\0)を使用して行われます。

コメント

この記事へのコメントはありません。

関連記事

C言語 ~4日目~

C言語 ~1日目~

C言語でフレーム可変データセット 前編

PAGE TOP