指向堆上数组的指针的地址

时间:2013-03-04 22:49:18

标签: c++ arrays pointers

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

以下代码可以使用

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

还有以下

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

但不是以下

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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