Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

C++で2次元配列(文字列)の動的確保

スポンサードリンク



前回のC言語C言語で2次元配列(文字列)の動的確保 - Gobble up puddingで2次元配列(文字列)の動的確保の続きです。
C++のnewによる前回説明したパターンと同じやり方です。
mallocの代わりにnewを使います。mallocを使う場合はC++ではキャストが必要になります。
説明の都合上、stringクラスは使っていません。
もちろんvectorも使ってません。vectorおとなしく使うのが正解なんですが…。
この方法いつ使うの?ってケースですが古いAPIを利用するときに
charの形だと何かと便利なケースがあると思うのでそういう時に使います。

どうでもいいですけど、名前空間ってカンマ必要だったかどうかいっつも迷います。
ちなみにVC++でコンパイルするには先頭に

#define _CRT_SECURE_NO_WARNINGS

が必要です。

g++でコンパイル

g++ -o test.exe test.cpp

マジキチ構造でもいけちゃう方法

char arr[64][8]の配列を作る。つまり1行あたり8文字の64行確保です。
よく参考書にのっているやり方でchar arr[y][x]の領域を確保します。
不連続な領域になってしまうので実用性はあるのか謎です。
ガタガタな構造でメモリ節約なんてことをやろうと思うとこの方法しかありません。
ただガタガタ構造を作るためには1行1行文字数をバラバラに指定してmallocを呼ばなきゃなりません。

とりあえず連続領域で確保する方法

連続領域で確保する場合のやり方です。上の例よりちょっとましな方法ですが…。
これも使うの?と言った感じがします。
このやり方だと1行あたりの文字数が固定で確保することになります。

多分いちばん楽な方法

これでもちゃんとchar*を格納した配列としてアクセスできます。一見ややトリッキーですが。

結論:よっぽどの事情がなければ2次元配列なんて使わないでおきましょう。