配列
一つの名前で複数のデータを管理するために使う。
#include <stdio.h> int main(void) { int array_i[4]; int sum; int i; array_i[0] = 1; array_i[1] = 2; array_i[2] = 3; array_i[3] = 4; sum = 0; for (i=0; i < 4; i++) { printf("%d ", array_i[i]); sum += array_i[i]; } printf("\n"); printf("The total is %d\n", sum); }
まとめて初期化する。
#include <stdio.h> int main(void) { int array_i[] = {1, 2, 3, 4}; int sum; int i; sum = 0; for (i=0; i < 4; i++) { printf("%d ", array_i[i]); sum += array_i[i]; } printf("\n"); printf("The total is %d\n", sum); }
多重配列
n
次元の配列を作ることができる。
#include <stdio.h> int main(void) { int a[3][4]; int i, j; for (i=0; i<3; i++){ for (j=0; j<4; j++){ a[i][j] = i + j; } } for (i=0; i<3; i++) { for (j=0; j<4; j++) { printf("%d " , a[i][j]); } printf("\n"); } printf("\n"); }
文字列と配列
c
には文字列を扱うための型が存在しないので、char
型の配列を使うことで文字列とする。
#include <stdio.h> int main(void) { char s[5] = {'a', 'b', 'c', 'd', '\0'}; int i; printf("%s\n", s); // それぞれの文字は対応する整数として保存される。 printf("%d\n", s[0]); // cast すれば文字になる。 printf("%c\n", (char) s[0]); for (i=0; i<5; i++) { printf("%c", (char) s[i]); } printf("\n"); }
文字列の終わりを表すため、終端文字(Null文字) \0
を配列の最後に入れる。
プログラムは終端文字を見つけるまでメモリをたどる。
#include <stdio.h> int main(void) { char s1[5] = {'a', 'b', 'c', 'd', '\0'}; char s2[4] = {'a', 'b', 'c', 'd'}; char s3[5] = {'a', 'b', 'c', 'd', '\0'}; printf("%s\n", s1); printf("%s\n", s2); printf("%s\n", s3); }
abcd abcdabcd abcd
文字列をまとめて代入できる。
この場合終端文字は最後に自動的に挿入され、確保される配列のサイズは 文字数+1
になる。
#include <stdio.h> int main(void) { char s[] = "abcd"; int i; printf("%s\n", s); for (i=0; i<5; i++) { printf("%c", (char) s[i]); } printf("\n"); }
宣言で確保した配列の容量に注意する。
容量を超える文字列は入力しようとすると、gcc
では stack smashing detected
が発生し、強制終了する。
#include <stdio.h> int main(void) { char s[10]; // 10バイトの配列を確保した。 // 10バイトを超える文字を入力すると stack smashing detected が発生。 // 強制終了する。 printf("Input string...: "); scanf("%s", s); printf("%s\n", s); }