- ベストアンサー
多次元配列の初期化
多次元配列の初期化を行いたいのですが、 下記の方法では、配列の値が多くなったときに大変 なので他に良い方法はありませんでしょうか? char lesson[7][6] = { {'A', 'B', 'C', 'D', 'E', 'F'}, {'G', 'H', 'I', 'J', 'K', 'L'}, {'M', 'N', 'O', 'P', 'Q', 'R'}, {'S', 'T', 'U', 'V', 'W', 'X'}, {'Y', 'Z', 'a', 'b', 'c', 'd'}, {'e', 'f', 'g', 'h', 'i', 'j'}, {'k', 'l', 'm', 'n', 'o', 'p'}, };
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
一般論としては、実行コードを伴わない配列変数の初期化には初期化子を書く以外の方法がありませんので、とにかくプログラム内に初期化子をずらずらと書くほかはありません。 自前で初期化子を書くことに代わる方法としては 1. 配列変数(ないし動的に確保した領域)を初期化するためのコードを書き、外部に置いたデータ(例えばファイル)を読み込んで実行時に初期化する。 2. 外部に置いたデータ(例えばファイル)を読み込んで「配列変数の初期化子」テキストを出力するようなプログラムを別途作成し、そのプログラムで生成したテキストをソースコードの一部(配列変数の初期化子)として使用してコンパイルする。 というものが考えられます。 2.の場合、このテキスト生成プログラムの実行もビルド手順の一部ということになります。
その他の回答 (2)
- kaeru_007
- ベストアンサー率22% (8/36)
こんにちわ。 char *lesson[7]={ "ABCDEF", "GHIJKL"}; と、ポインタの配列で書けば、lesson[x][y] という感じで参照できると思いますよ。 (試してないですが)
- jacta
- ベストアンサー率26% (845/3158)
とりあえず、例として挙げられたものであれば、 char lesson[7][6] = { "ABCDEF", "GHIJKL", "MNOPQR", "STUVWX", "YZabcd", "efghij", "klmnop", }; とすれば多少ましかと思います。 C++の場合は、文字列リテラルで配列を初期化するには、終端のナル文字まで収まるサイズがないとエラーになるので上記の方法は使えませんが、Cなら大丈夫です(警告は出るかもしれませんが)。