我正在尝试在堆上存储一个字符数组。
以下代码可以使用
char *array[3];
*array = new char;
还有以下
char *array[3];
array[0] = new char;
但不是以下
char *array[3];
array = new char;
我查看了*array
,array[0]
和array
的内容。在使用new
进行分配后,第一个和第二个不包含有效的指针地址,但第三个进行分配。
那么是什么让第三个不起作用呢?其他两个如何工作,而他们似乎只是存储一些未知符号(如$,%, - )而不是指针的实际地址?
答案 0 :(得分:5)
也许这将有助于详细说明char *array[3]
是什么。这是一个由三个指针组成的数组,指向字符。也就是说,array[0]
,array[1]
和array[2]
都是指向字符的指针。因此,*array
和array[0]
是存储指向字符的指针的好地方(实际上是同一个地方),但array
甚至不是指针,它是一个数组,所以试图存储一个没有意义的指针。
如果要在堆中存储字符(使用c样式的字符数组),您应该char *array;
然后将其初始化为array = new char[3];
但是,由于您使用的是C ++,因此建议您在尝试存储字符串时使用std::string
,或者如果需要单个字符列表,则使用std::vector
。