C言語の配列について

初期化

int型の配列を宣言(要素数10)
int array[10];
宣言と同時に値を設定
//指定されていない要素は0で初期化される
int array[10] = {1,2,3,4,5}; 
//サイズを指定しないと指定した初期値の数だけ要素が確保される。この場合は要素数5。
int array[] = {1,2,3,4,5}; 

文字列型配列

C言語では文字列は配列で扱う。
//helloの1文字づつを配列に格納
char string[] = "hello";

string配列の中身は以下のように初期化される。

string[0] -> 'h'
string[1] -> 'e'
string[2] -> 'l'
string[3] -> 'l'
string[4] -> 'o'
string[5] -> '\0' //\0はヌル文字

'\0'ってなんだ?

'\0'はヌル文字とよばれるもの。
文字列の最後は必ずヌル文字(\0)で終わる。

上記の宣言は下記の宣言と等価。
char string[] = {'h', 'e', 'l', 'l', 'o', '\0'};
文字列のプリント
char string[] = "hello";
printf("%s\n", string); //hello

終端のヌル文字に出会うまでプリントされる。
なので上記は下記のようにも書ける。

int i;
char string[] = "hello";

for (i = 0; string[i] != '\0'; i++) {
        printf("%c", string[i]);
}
printf("\n")

二次元配列

二次元配列は以下のように宣言する。

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

array[0][0] -> 1
array[0][1] -> 2
array[1][0] -> 3
array[1][1] -> 4

注意事項

配列の範囲外の要素を参照した場合でもエラーが発生しない。

/* array.c */
#include <stdio.h>

int main () {

	//5つの要素からなる配列を宣言し、0で初期化
	int n[5] = {0};
	
	//配列の範囲外の要素を参照
	printf("%d\n", n[7]); 
	
	return 0;

}

上記のコードを実行した場合下記のような出力になり、特にエラーは起きない。

$ gcc -Wall -o array array.c
$ ./array
-1074709032
$ ./array
-1074037816

予告

明日はポインターについて勉強します。