>ソースのわかりやすさでも、機能性とかバグ回避の点でも
>(B)が優れているとは言えないわけですね。
いいえ。必ずしもそうとは言い切れません。
(B) は静的に確保したいわゆる二次元配列 char a[MX][MY] と完全互換です。
char a[MX][MY] を渡して欲しいと思っている関数には (B) だけが使えます。
=配列の全要素がメモリ上で連続である必然がある用途に対しては (B) でなければなりません。
fwrite こそしないかもしれませんが memset はしたくなるかもしれませんしね。
仮想記憶の話を書きましたが、容量的に char a[MX][MY] と書いて問題ない状況下に
おいては (B) を避ける理由がありませんし、問題が出る状況下ではどっちにせよダメですから。
http://forums.belution.com/ja/cpp/000/000/89s.shtml
とかに類似の話題がありますな。とりあえず参照してみてください。
まあ今なら vector の vector を使うほうがお勧めです(A に類似:それでよい用途なら)。
生 new なんぞ使うと delete 忘れのほうが怖いので。