- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 授業/C言語基礎/配列 へ行く。
- 1 (2015-11-23 (月) 16:40:04)
- 2 (2015-11-23 (月) 16:57:02)
- 3 (2015-11-24 (火) 10:21:00)
- 4 (2015-11-24 (火) 19:10:45)
- 5 (2015-11-25 (水) 23:40:54)
- 6 (2015-11-26 (木) 08:40:40)
- 7 (2015-11-26 (木) 12:50:03)
- 8 (2015-11-30 (月) 16:44:28)
- 9 (2015-12-29 (火) 11:20:07)
- 10 (2016-11-25 (金) 01:58:24)
- 11 (2016-11-25 (金) 10:25:19)
- 12 (2016-11-27 (日) 10:33:25)
- 13 (2016-11-28 (月) 09:08:35)
- 14 (2016-11-29 (火) 09:36:19)
同じ型の変数を複数集めて並べたものを配列といいます。
配列に含まれる変数の数のことを配列の要素数または配列の長さといいます。
配列を宣言する †
配列を使うには、変数と同じように、使う前に宣言する必要があります。
配列は同じ型の変数が集まってできていますので、配列に含まれる変数の型を配列の型として宣言します。 配列名の後に角括弧 [ ] を付け、括弧の中に要素数を指定します。
型 配列名[要素数];
たとえば、要素数3のint型の配列 a を宣言すると、次のようになります。
int a[3];
配列が宣言されると、要素となる変数を規則するのに必要な容量に要素数をかけた分の記憶容量がまとめて確保されます。
配列の要素にアクセスする †
配列の要素にアクセスする(値を代入する、値を参照する)には、配列名の後に角括弧 [ ] を付け、括弧の中に要素番号(インデックス番号)を指定します。
int a[3]; a[0] = 250; a[1] = 350; a[2] = 500; printf("%d\n", a[0]);
要素番号が 0 から始まることに注意しましょう。 したがって、要素番号の最大値は要素数よりも1小さい数です。
セグメント・エラー †
宣言した範囲を超えた要素番号にアクセスすると、(コンパイル時にはエラーになりませんが、)実行時にエラーになることがあります。
このエラーを、セグメンテーション・フォールト (Segmentation fault)、セグメンテーション違反、セグメンテーション・エラーなどといいます。
たとえば、次のプログラムについて考えてみましょう(プログラム2)。
int a[3]; a[0] = 250; a[1] = 350; a[2] = 500; printf("%d\n", a[10000]);
宣言した配列の要素数は3なので、要素番号の範囲は0から2までですが、このプログラムでは要素番号を10000にしています。
このプログラムを実行すると、次のようになります。
luna% ./a.out セグメントエラー
配列を初期化する †
配列の値を、宣言時に一度に代入することができます。 これを、配列の初期化といいます。
配列を初期化するときは、波括弧 { } の中にコンマ , 区切りで要素を並べ、リストを作って代入します。
int a[3]; int i = 12345; printf("%d\n", a[3]);
配列を初期化するときに要素数を省略すると、初期化するリストの要素数が配列の要素数になります。
luna% a.out 12345
配列を初期化するときのリストの要素数が宣言された配列の要素数よりも短いときは、残りの要素には 0 が代入されます。
int a[3]; a[0] = 250; a[1] = 350; a[2] = 500; for (i = 0; i < 3; i++) { printf("%d\n", a[i]); }
int a[] = {1, 2, 3, 4, 5}; int i, len, sum; len = sizeof(a) / sizeof(a[0]); sum = 0; for (i = 0; i < len; i++) { sum += a[i]; } printf("%d\n", sum);