配列
一つの名前で複数のデータを管理するために使う。
#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);
}