0

文字の配列をヒープに格納しようとしています。

次のコードが機能します

char *array[3];
*array = new char;

また、次の

char *array[3];
array[0] = new char;

しかし、以下ではありません

char *array[3];
array = new char;

*arrayarray[0]およびのコンテンツを表示しましたarray。最初と 2 番目には、using を割り当てた後に有効なポインター アドレスが含まれていませんnewが、3 番目のものには含まれています。では、3 つ目が機能しない理由は何でしょうか? ポインタの実際のアドレスではなく、不明な記号 ($、%、- など) を格納しているように見える他の 2 つの関数はどのように機能するのでしょうか?

4

1 に答える 1

5

おそらく、それが何であるかを詳しく説明するのに役立つでしょうchar *array[3]。これは、文字を指す 3 つのポインターの配列です。つまり、array[0]array[1]array[2]はそれぞれ文字へのポインターです。したがって、*arrayarray[0]は文字へのポインターを格納するのに適した場所 (実際には同じ場所) ですがarray、ポインターでさえなく、配列であるため、そこにポインターを格納しようとしても意味がありません。

文字を (C スタイルの文字配列を使用して) ヒープに格納する場合は、単に実行してから次のようchar *array;に初期化する必要があります。array = new char[3];

ただし、C++ を使用しているstd::stringため、文字列を格納しようとする場合、またはstd::vector単一文字のリストが必要な場合は、使用することをお勧めします。

于 2013-03-04T22:52:00.820 に答える