0

我正在尝试在堆上存储一个字符数组。

以下代码有效

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

还有以下

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

但不是以下

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

我查看了*arrayarray[0]的内容array。第一个和第二个在分配 using 后不包含有效的指针地址,new但第三个包含。那么是什么让第三个不起作用呢?其他两个如何工作,而它们似乎只是存储一些未知符号(例如 $、%、-)而不是指针的实际地址?

4

1 回答 1

5

也许这将有助于详细说明 achar *array[3]是什么。这是一个由三个指针组成的数组,它们指向字符。也就是说,array[0]array[1]array[2]都是指向一个字符的指针。所以,*arrayandarray[0]是存储指向字符的指针的好地方(实际上是同一个地方),但array它甚至不是指针,它是一个数组,所以试图在那里存储一个指针是没有意义的。

如果要将字符存储在堆中(使用 c 样式的字符数组),您应该这样做char *array;,然后将其初始化为array = new char[3];

但是,由于您使用的是 C++,因此建议您std::string在尝试存储字符串或std::vector想要单个字符列表时使用。

于 2013-03-04T22:52:00.820 回答