このスライドの使い方
配列
(教 p.116)
- 同一の型のデータを集めて、
番号(添字、そえじ)でアクセスできるようにしたもの
- C 言語の配列の添字は 0から
- 角括弧
[
〜 ]
で各要素にアクセス — a[i]
/* 初期化しないとき */
int va[5];
配列(つづき)
(教 p.120, p.130)
/* 配列の初期化は、式をコンマで区切って { } で囲む */
/*(残りの要素は 0 で初期化される) */
int vb[5] = { 15, 20, 30 };
/* 初期化子を代入することはできない — 教 p.121 */
vb = { 15, 20, 30, 0, 0 };
/* 配列同士の代入はできない — 教 p.130 */
vb = va;
作業:
まとめのプリント Q 5.1.1 をやってみる
配列の走査
(教 p.118)
- 配列は for 文と相性が良い
- 5 個の要素を持つ配列の各要素に対して同じ操作を行なうときには…
for (i = 0; i < 5; i++) {
a[i] = …;
}
作業:
List 5-3,
List 5-4
を実行する
配列の要素に値を読み込む
(教 p.122)
作業:
List 5-7
を実行する
配列の全要素の並びを反転する
(教 p.123)
2 つの変数 x
, y
の中身を入れ替えるのに、
x = y; y = x;
と書いてもダメ、
別の変数(例えば temp
)を一つ用意して、
temp = y; y = x; x = temp;
と書く必要がある
作業:
List 5-8
を実行する
なお、List 5-8 は
真ん中のループは、↓ のコンマ演算子を使うかたちも可 (comma2.c)
for (i = 0, j = 6; i < j; i++, j--) {
int t = x[i];
x[i] = x[j];
x[j] = t;
}
オブジェクト形式マクロ
(定数マクロ)
(教 p.124)
プログラム中で繰り返し使う定数は名前をつける
#define NUMBER 5
- この指令は
NUMBER
というオブジェクト形式マクロを定義す
る
- マクロは他のコンパイル処理に先だって、一括して置換される
作業:
List 5-10
を実行する
マクロを定義する利点
- 値の変更が容易になる
- 定数の意味がわかり易い
秘密の数値(マジックナンバー)を直接プログラムに埋め込まない!
マクロが使われる箇所
配列の要素数など、文法上、定数が要求されるところ
円周率などの数学定数・物理定数など絶対不変の定数
(これら以外では、通常の変数を使うのが普通)
C99 規格では
(教 p.136)
配列の要素数に変数を使った書き方も一応可能
int n = 3;
int a[n]; /* C99 では許容だが */
for (i = 0; i < n; i++) {
a[i] = 0;
}
マクロ名
(教 p.124)
すべての文字を大文字とする慣習がある
- 小文字を使ってもコンパイルエラーになるわけではないが、強く非推奨とする
(演習の解答で、小文字を使ったマクロ名は間違いとする)
- 逆に、変数名は必ず小文字を混ぜること
(演習の解答で、大文字だけの変数名は間違いとする)
代入式の評価
(教 p.126)
代入「変数 =
式 」も式であり、値(代入された値と同じ)を持つ
- 代入演算子は右結合である(右側から行われる)
- つまり、
x = y = 0
は x = (y = 0)
と解釈される
作業:
List 5-11
を実行する
作業: まとめのプリント Q 5.1.2 をやってみる
配列の要素数〜配列のコピー
(教 pp.128–131)
教科書を読んでおく
Warning
(教 p.131)
- 発音は /'wɔːnɪŋ/
- カタカナではウォーニングが近い
- 警告という意味で、エラーではないが間違っている可能性が高いことを示す
break 文の例
(まとめのプリント)
作業:
breakTest.c
を実行する(break を continue に変えたものも試す)
作業: まとめのプリント Q 5.1.3 をやってみる
§ 5-2「多次元配列」
(教 pp.132–137)
多次元配列
(教 p.132)
各要素が配列であるような配列、言い替えれば 2 つ以上の添字を持つ配列のこと
ただし、物理的には一次元に配置される(Fig.5-10 参照)
作業: まとめのプリント Q 5.2.1 をやってみる
int x[2][3] = {{ 1, 2, 3 }, { 4, 5, 6 }};
作業:
List 5-15
を実行する
作業: まとめのプリント Q 5.2.2 をやってみる
宣言 (declaration)
分類 |
一般形 |
配列宣言 |
型 変数 [ 定数 ]
= { 式 , … , 式 } ; |
「=
」以降の 灰色の部分は省略可能
式 (expression)
分類 |
一般形 |
補足説明 |
配列アクセス |
式 [ 式 ] |
a[1] , b[2][3] など |