[解決済み] c++のダブルポインタ配列
質問
BTreeに関するプログラムを読んでいて、こんなことに出くわしました。
BTreeNode **C
. 2次元の配列であることは理解できますが、初期化されるのは
C=new BTreeNode *[2*t];
. これは動的な行と2t列を持つ2次元配列なのでしょうか?
ありがとうございます。
どのように解決するのですか?
皆さんはよくご存知だと思いますが
double*
へのポインタです。
double
要素で構成されます。同じように
double**
へのポインタです。
double*
要素であり、それ自体がポインタである。もう一度言います。
double***
へのポインタです。
double**
要素などです。
配列を型にインスタンス化すると
T
を使用する場合、通常は
new T [size];
. 例えば、配列の
double
と書くと、次のようになります。
new double[size];
. もし、あなたが
T
がポインタであっても、それは全く同じです。
new double*[size];
で、ポインタの配列が得られます。
あなたの場合
BTreeNode*
へのポインタです。
BTreeNode
であり、かつ
BTreeNode**
へのポインタです。
BTreeNode*
へのポインタである
BTreeNode
. を実行してインスタンス化すると
new BTreeNode*[size];
へのポインタの配列を取得します。
BTreeNode
要素で構成されます。
しかし、実はこの段階では、2次元配列はできていません。なぜなら、割り当てられたばかりの配列のポインタは、割り当てられていないからです。通常のやり方は、次の例のようになります.
int num_rows = 10;
int num_cols = 20;
BTreeNode** C = new BTreeNode*[num_rows];
for(int i = 0; i < num_rows; i++)
{
// Then, the type of C[i] is BTreeNode*
// It's a pointer to an element of type BTreeNode
// This pointer not allocated yet, you have now to allocate it
C[i] = new BTreeNode [num_cols];
}
使用後はメモリを削除することを忘れないでください。通常のやり方は以下の通りです。
for(int i = 0; i < num_rows; i++)
delete [] C[i];
delete [] C;
関連
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン