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

Address of a pointer to an array on the heap

本文关键字:指针 地址 数组      更新时间:2023-10-16

我试图在堆上存储字符数组。

下面的代码可以工作

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

还有下面的

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

但不是下面的

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

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

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

如果你想在堆中存储字符(使用c风格的字符数组),你应该只执行char *array;,然后将其初始化为array = new char[3];

然而,由于您正在使用c++,如果您试图存储字符串,建议使用std::string,或者如果您想要单个字符的列表,建议使用std::vector