1

配列があります。

char tab[200];

次に、前の配列要素へのポインタで構成される配列を作成します

char** t = new (char*)[LENGTH];

しかし、私は得ます

C:\Users\Duke\Desktop\PJC3\main.cpp|37|error: array bound forbidden after parenthesized type-id|

動的に宣言するにはどうすればよいですか?

EDITtab:配列の対応する要素を指しているのは正しいですか?

char** t = new char*[dlugoscTab];

for(int i = 0; i < dlugoscTab; i++){
   *(t + i*sizeof(char)) = (tab + i*sizeof(char));
}
4

3 に答える 3

2
char** t = new (char*)[LENGTH];

する必要があります:

char** t = new char*[LENGTH];

のすべての要素がのthi要素tを指すようにする場合は、次のように簡単に行うことができます。itab

for(int i=0; i<LENGTH; i++ )
    t[i] = & tab[i];
于 2013-03-16T16:27:14.853 に答える
2

あなたがしようとしている方法でそれを行うには、かっこを取り除く必要があります:

char** t = new char*[LENGTH];
for (i = 0; i < LENGTH; i++) {
  t[0] = &tab[i];
}

ただし、ここで動的割り当てを使用する理由はあまりないように思われるため、次の配列を使用してchar*ください。

char* t[LENGTH];
for (i = 0; i < LENGTH; i++) {
  t[0] = &tab[i];
}

std::arrayまたは、またはのような標準のコンテナを使用することをお勧めしますstd::vector

編集の割り当てが正しくありません:

*(t + i*sizeof(char)) = (tab + i*sizeof(char));

この場合sizeof(char)機能しますが、それは1だからです。ここに関与するべきではありませんsizeof。ポインタに1を追加しても、ポインタは1バイト移動しませんが、ポインタが指しているタイプの次のオブジェクトを指すように移動します。あなたがしているべきです:

*(t + i) = (tab + i);

しかし、上記の例で書いたように、これは正確にはるかに理解しやすいです。

t[i] = &tab[i];
于 2013-03-16T16:27:46.193 に答える
0

正しい構文は次のとおりです。

char (*t)[LENGTH] = new char(*)[LENGTH];

ただし、配列ではなく1つのポインターを割り当てるだけなので、newで割り当てることはあまり意味がありません。

于 2013-03-16T16:28:34.837 に答える