dポイントプレゼントキャンペーン実施中!

C言語初心者ですがよろしくお願いします。

C言語では、例えばint型の3行4列の2次元配列を表現するときに、
int array[3][4];
とするようですが、
必ず1つ目の[ ]で行番号を、2つ目の[ ]で列番号を表さなければならないものなのでしょうか。
もし慣習的にそうしているものなら、
行と列を指定する[ ]を入れ替えてプログラムを作成しても問題ないのでしょうか?

というのも、メモリ上の割り当てが、
array[0][0]
array[0][1]
array[0][2]
array[0][3]
array[1][0]
array[1][1]
array[1][2]
...
...
...
array[2][2]
array[2][3]
のようになるなら、
その配列をfwrite関数でバイナリデータに書きこんで、再度、列方向に読み込みたい時に、
あらかじめ書きこむ前のデータをarray[列][行]の形で扱っていった方が便利ではないかと思ったのですが、なにか初歩的な勘違いしてたりしますでしょうか?


ご教授お願いします。

A 回答 (2件)

もちろん「数学的には非常識」であっても, そうする十分な理由があればそれを押し通せばいいということになります. たとえば, メモリ上での配置は質問文に書かれているようになっているので,


「行と列を逆にした方が (キャッシュなどの関係で) 効率的にアクセスできる」
ということであればそれも 1つの見解でしょう. 本当に効率的かどうかは知りませんが.
    • good
    • 0
この回答へのお礼

再度ご回答ありがとうございます。
個人的には、速度を向上させるということよりも、
他の言語でデータを出力する際のフォーマットと一致させることが目的でした。
他の言語での出力方法はこれから確認していくところですが、
今はとにかく基本的なことを勉強している段階なので、ご回答参考になりました。
ありがとうございました。

お礼日時:2011/12/17 16:06

もちろん入れ替えても「プログラムとして」は問題ないです.



とはいえ, 数学的には「行→列」という順序で添え字を書いていくので, 「非常識」と言われる可能性は覚悟してください.
    • good
    • 0
この回答へのお礼

素早いご返答ありがとうございました。
実際この方法で作るかどうかは別としても、
知識として確認しておきたかったので、質問させていただきました。
・・・確かに非常識な方法だと思います。

お礼日時:2011/12/16 15:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!