C言語の二重ループとは?for文を入れ子にする仕組みを図解でわかりやすく解説

目次

はじめに

for文やwhile文を学ぶと、次に出てくるのが「二重ループ」です。

でも初心者の頃は、

  • ループの中にループ?
  • どっちが先に動くの?
  • なぜそんなことをするの?

と混乱しやすいポイントでもあります。

初心者さん

for文の中にfor文を書くんですか?

エンジニアくん

そう。最初は難しく見えるけど、“縦と横を処理する”って考えると分かりやすいよ

初心者さん

縦と横…?

エンジニアくん

表とかマス目をイメージすると理解しやすいんだ


実は二重ループは、

  • 表形式データ
  • 二次元配列
  • 座標処理
  • 全探索アルゴリズム

など、C言語では非常によく使われる重要な考え方です。

この記事では、C言語の二重ループ(ネストループ)の仕組みを、図や実行順序を使いながら初心者向けにわかりやすく解説します。


C言語文法解説シリーズ

C言語の文法や制御構文についてまとめたシリーズです。

C言語文法解説シリーズ一覧はこちら


二重ループとは?

二重ループとは、ループの中に、さらにループを書く処理です。

例えば以下のコードです。

C
#include <stdio.h>

int main(void) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            printf("i=%d j=%d\n", i, j);
        }
    }

    return 0;
}

このように、外側のfor文の中に、さらにfor文を書いています。

これを「二重ループ」や「ネストループ(入れ子ループ)」と呼びます。

for文の基本が不安な方は、先に通常のfor文の記事を読むのがおすすめです。

「for文とは?」の記事はこちら


二重ループの実行順序

初心者が最も混乱しやすいのがここです。

重要なのは、外側ループが1回進むたびに、
内側ループが全部実行されるという点です。

実際の動きを順番に見るとこうなります。

i=0
j=0
j=1
j=2
j=3

i=1
j=0
j=1
j=2
j=3

i=2
j=0
j=1
j=2
j=3

つまり、

  • i が1回増えるたびに
  • j が最初から最後まで全部回る

という動きになります。


なぜ二重ループを使うの?

二重ループは「縦と横」を扱う処理でよく使われます。


① 表形式データを扱う

例えば以下のような表です。

○ ○ ○
○ ○ ○
○ ○ ○

これは、

  • 行(縦)
  • 列(横)

を持っています。

二重ループは、この「行と列」を処理するために使われます。


② 二次元配列を扱う

C言語には二次元配列があります。

C
int array[3][4];

これは、

  • 3行
  • 4列

の配列です。

このような配列を処理するとき、二重ループが非常によく使われます。

C
for (int row = 0; row < 3; row++) {
    for (int col = 0; col < 4; col++) {
        printf("%d\n", array[row][col]);
    }
}

二次元配列については、別記事でも詳しく解説しています。

👉 「二次元配列とは?」の記事も合わせて読むと理解が深まります。


③ 全組み合わせを調べる

例えば、

  • 全員と全員を比較する
  • すべての組み合わせを確認する

といった処理でも二重ループを使います。

AとB
AとC
AとD
BとC
BとD

アルゴリズムや探索処理でもよく登場します。


実際に「*」を表示してみる

二重ループは、図形表示をすると理解しやすくなります。

C
#include <stdio.h>

int main(void) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 5; j++) {
            printf("*");
        }

        printf("\n");
    }

    return 0;
}

実行結果:

*****
*****
*****

なぜこう表示されるの?

ポイントは役割の違いです。

内側ループ

C
for (int j = 0; j < 5; j++)

これは横方向です。

*****

を作っています。


外側ループ

C
for (int i = 0; i < 3; i++)

これは縦方向です。

*****
*****
*****

の「行数」を増やしています。


二重ループは「行と列」で考える

二重ループは、

  • 外側 = 行(row)
  • 内側 = 列(col)

で考えると理解しやすくなります。

row → 縦方向
col → 横方向

この考え方は、

  • 二次元配列
  • 画像処理
  • ゲーム座標
  • 行列演算

など、今後もずっと使います。


二重ループで混乱しやすいポイント

① どっちが先に動く?

内側ループが最後まで回ってから、外側ループが1回進みます。

ここを逆に考えると混乱しやすいです。


② 改行位置を間違えやすい

例えばこのコード。

C
printf("\n");

を内側ループに入れると、

*
*
*
*
*

のように縦表示になります。

改行位置で結果が大きく変わります。


③ 無限ループになりやすい

条件式を書き間違えると、二重ループは非常に止まりにくくなります。

例えば、

C
j++

を書くべき場所を間違えるケースなどです。


二重ループは実務でもよく使う

実務でも二重ループは非常によく登場します。

例えば:

  • 画面描画
  • センサーマップ処理
  • テーブル検索
  • 行列データ
  • CSVデータ処理
  • ゲームマップ

などです。

特に組み込み開発では、「複数データを規則的に処理する」

場面が多いため、二重ループはかなり頻繁に使います。


まとめ

二重ループとは、ループの中に、さらにループを書く処理です。

ポイントは以下です。

  • 外側1回につき、内側が全部回る
  • 行と列で考えると理解しやすい
  • 二次元配列や表形式データでよく使う
  • 実務でも非常によく登場する

最初は混乱しやすいですが、

  • 「横方向」
  • 「縦方向」

を意識すると、一気に理解しやすくなります。

この記事が参考になった方へ

制御構文を含むC言語の基本文法をこちらの記事で整理しています。

エンジニアとして技術を学ぶことは重要ですが、
キャリアや副業についても同時に考える必要があります。

副業の現実や市場価値、今後のキャリア戦略については、
こちらの記事でまとめています。

技術に関するご相談・開発・自動化ツール作成・記事執筆などのご依頼も承っています。

小さなご相談からでもお気軽にご連絡ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

組み込みソフトエンジニアとして働きながら、
C言語・メモリ・ポインタなどの基礎から実務まで解説しています。

副業・キャリアについても実体験ベースで発信中です。

X・Qiita・noteでも発信しています。
X:更新情報・日常
Qiita:技術発信
note:キャリア・副業

▼まずはここから読むのがおすすめ
C言語文法シリーズ
メモリ領域解説シリーズ
割り込み処理解説シリーズ
ソフトウェア設計解説シリーズ
キャリアと副業ロードマップ

コメント

コメントする


目次