配列
一つの名前で複数のデータを管理するために使う。
#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[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[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);
}
#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);
}
#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");
}
#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");
}
#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");
}
#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");
}
#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);
}
#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);
}
#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");
}
#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");
}
#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);
}
#include <stdio.h>
int main(void) {
char s[10];
// 10バイトの配列を確保した。
// 10バイトを超える文字を入力すると stack smashing detected が発生。
// 強制終了する。
printf("Input string...: ");
scanf("%s", s);
printf("%s\n", s);
}
#include <stdio.h> int main(void) { char s[10]; // 10バイトの配列を確保した。 // 10バイトを超える文字を入力すると stack smashing detected が発生。 // 強制終了する。 printf("Input string...: "); scanf("%s", s); printf("%s\n", s); }