- ベストアンサー
C言語基本 2次元配列(for文:条件値について)
はじめまして。C言語の超入門者です。現在、基礎的な事を独学中なのですが、以下(10)(11)の部分の解釈で行き詰まってしまいました。 (1)#include <stdio.h> (2) (3)main() (4){ (5)int x,y; (6)int a[2][4]={ (7){1,2,3,4}, (8){5,6,7,8} (9)}; (10)for(x=0;x<2;x++){ (11)for(y=0;y<4;y++) (12)printf("a[%d][%d]=%d ",x,y,a[x][y]); (13)printf("\n"); (14)} (15)} (6)は、int a[2][4]・・・y方向に2列、x方向に4列 ↑■■■■■■■ ↑■5■6■7■8■ Y ■■■■■■■ 方■1■2■3■4■ 向■■■■■■■ X方向→→ なので (10)行目での条件を x<4 (11)行目での条件を y<2 とすると結果が正しく出ず、 (10)行目での条件を x<2 (11)行目での条件を y<4 と値を逆転させると正しく表示されるのは何故でしょうか? (6)int a[2][4]は、x方向は2列 , y方向は4列 と逆に考えたほうが正解なのでしょうか? 超初心者でも分かる簡潔かつ明快な回答を宜しくお願い致します。
お礼
fatbowlerさん、ご回答有難うございます。 正に私が悩んでいた核心を突いて頂き有難うございます。 ご説明頂いた内容をよく噛み砕いて考え直したいと思います。 また、どうしても分からない時にはご回答宜しくお願い致します。
補足
fatbowlerさんはじめ、有識者のご意見を再度お聞きしたくて、新たに質問させて頂きます。 様々なご回答を頂きながら、今更ながら気付いたのですが、for文(2重ループ)に対しての理解も不十分だったようです。 fatbowlerさんの投稿を拝見した後、参考書および有識者のWEBサイトを見て回ったのですが、今回の2重ループは以下のような捉え方をすればいいのかな?と半信半疑の状態ですので、ご指南の程、宜しくお願い致します。 --------------------------------------------------------------- 【今回の質問箇所】 (10)for(x=0;x<2;x++){ (11)for(y=0;y<4;y++) --------------------------------------------------------------- ■現在の2重ループ理解状況■ 【プロセス1】 ★x = 0 の状態で y=0 (結果:a[0][0] = 1) y=1 (結果:a[1][0] = 2) y=2 (結果:a[2][0] = 3) y=3 (結果:a[3][0] = 4) 以上yへの代入を実行しプロセス2へ --------------------------------------------------------------- 【プロセス2】 ★x = 1 の状態で y=0 ⇒ a[0][1] = 5 y=1 ⇒ a[1][1] = 6 y=2 ⇒ a[2][1] = 7 y=3 ⇒ a[3][1] = 8 以上yへの代入を実行し終了 --------------------------------------------------------------- 【イメージ】 ■■■■■ ■4■■8■y[3] ■■■■■ ■3■■7■y[2] ■■■■■ ■2■■6■y[1] ■■■■■ ■1■■5■y[0] ■■■■■ x[0] x[1] --------------------------------------------------------------- 上記内容で正しければ、今回の疑問は皆様のご協力で無事解決となるのですが。どうぞ、宜しくお願い致します。