C言語学習ポータル(無料版) 学習コンテンツ 配列

🗃️ 配列

全8トピック・無料版に収録

同じ型の箱を一列に並べる。添字の0始まり、ループとの黄金コンビ、そして境界外アクセスという重大事故を最初から意識する。

アプリでこのトラックを学ぶ(無料・登録不要)

収録トピック

配列とは——箱の行列

5人分のテストの点数を記録してください、と言われたらどう書きますか。 5人ならまだ我慢できます。では40人のクラスは。1000人の模試は。合計を出すのに score1 + score2 + ... と1000個並べるのは現実的ではありません。同じ型のデータをまとめて扱う道具が必要です。それが配列です。 [5] は「箱の個数」を表します。並んだ箱の1つずつを要…

添字と0始まりの理由

「1番目の要素が a[0]」——最初はどうしても違和感があります。なぜ1から始めてくれなかったのでしょうか。 答えは、添字が「何番目か」ではなく「先頭から何個ぶんずれているか」を表しているからです。 先頭の要素は、先頭から0個ぶんずれた場所にあります。だから a[0]。この「ずれ」の考え方はコンピュータにとって都合がよく、a[i] の場所を「配列の先頭 + …

配列とループの黄金コンビ

配列とfor文は、Cでいちばん出番の多い組み合わせです。「同じ処理を、全要素に対して」というパターンは、この形にすべて収まります。 この5行が体に入ると、合計・平均・最大値・検索・並べ替えまで、ほとんどの処理が同じ骨格で書けるようになります。中身を差し替えるだけで、やれることが次々に増えるからです。 sum += a[i]; → 合計 if (a[i] > …

境界外アクセスという重大事故

このトピックは、C言語を学ぶうえで最も重要な安全教育です。文法よりも先に、体に刻んでください。 int a[3] と宣言したのに a[3] や a[5] に触れる。これを境界外アクセスと呼びます。そしてCは、それを黙って通します。 x は一度も書き換えていないのに、値が変わることがあります。配列のすぐ隣に置かれていた x の場所を、a[3] が踏んだからです…

配列の初期化いろいろ

宣言しただけの配列の中身は不定です。前に別の処理が使っていた値がそのまま残っている、いわばゴミの状態。読んでも意味のない数字が出てきます。だから配列は、作ると同時に中身を決めるのが基本です。 足りないぶんは0で埋まる 初期化子が要素数より少ないとき、残りは自動的に 0 になります。この性質を使った定番の書き方が {0} です。 逆に、要素数より多く書くとコン…

多次元配列

配列の要素を、さらに配列にできます。こうしてできるのが多次元配列で、いちばん出番が多いのは2次元です。表・マス目・座席表・画像——縦横に並ぶものは、たいていこれで表せます。 読み方は「int が3個入った配列が、2個並んだもの」。先の [2] が行数、後ろの [3] が列数です。アクセスは m[行][列] の順で、どちらの添字も0始まりです。 どんなときに使…

配列を関数に渡す——入口編

配列も関数に渡せます。書き方はこうです。 渡すときは score と角カッコなしの名前だけを書きます。受け取る側は int a[] と書き、個数は空のままにします。 なぜ要素数も一緒に渡すのか ここが最大のポイントです。関数の中では、受け取った配列が何個の要素を持つのか分かりません。sizeof(a) / sizeof(a[0]) を関数の中で書いても、正し…

集計・最大値・検索の定石

配列でやることは、実のところ数種類しかありません。ここで型(かた)として覚えてしまえば、あとは組み合わせるだけです。 毎回ゼロから考えると、初期値や範囲の判断でどこかを間違えます。型として手が覚えていれば、考える対象は「何を集計するか」だけになります。慣れた人がすばやくコードを書けるのは、頭の回転が速いからではなく、この引き出しを持っているからです。 定石1…

このトラックで出てくる用語

境界外アクセス 添字(インデックス) 多次元配列 配列 配列の初期化 配列の走査 配列の引数渡し 配列の要素数 配列要素

ほかのトラック

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH