新char [10]和新char(10)之间有什么区别

时间:2010-10-10 20:17:58

标签: c++

在C ++中,

之间有什么区别
char *a = new char[10];

char *a = new char(10);

谢谢!

6 个答案:

答案 0 :(得分:61)

第一个分配一个10个字符的数组。第二个分配一个初始化为10的char。

或者:

第一个应该用std::vector<char>替换,第二个应该放在智能指针中。

答案 1 :(得分:14)

new char[10];

动态分配char [10](char数组,长度为10),具有不确定的值,而

new char(10);

再次,动态分配一个char,整数值为10。

答案 2 :(得分:10)

char *a = new char[10];
...
delete [] a;

以上动态分配和释放10个可用于存储字符的连续内存插槽。

char *a = new char(10);
...
delete a;

以上动态分配和释放一个用整数值10初始化的内存槽,相当于char值'\n'


如果您没有先了解指针,请不要使用std::vector<T>。了解内存分配和指针如何工作将使您成为更好的程序员

答案 3 :(得分:1)

我宁愿使用:

size_t size = 10; //or any other size
std::string buff(size, 0); //or: std::string buff(size, '\0');

现在如果你必须使用char * buff,那么你可以使用:

&buff[0]

当您需要使用const char *时,您可以使用:

buff.c_str()

最大的好处是你不需要释放内存,为你照顾好这个。 下一个优点是您可以使用所有stl字符串函数

答案 4 :(得分:0)

那么第一个将制作一个数组。 但我想你的问题主要是在第二个问题上。 您的代码可以将其用作有效字符,请考虑:

char * x ;
cin >> *(x=new char()) ;

将动态创建一个角色,然后从stdin中读取它。

答案 5 :(得分:0)

[10]定义了一个数组,其中,(10)为新创建的(单个)字符分配一个值。

如果您想在C中声明大小为10的数组,并且错误地定义了 char a(10), 编译器将抛出语法错误,因此您可以对其进行修复。 但是在C ++中,它可以正常编译,并且访问a [1]或删除 a时,您的程序可能会崩溃。

因此在C ++中,最好使用 vector 而不是动态分配的数组。 我希望你明白了。