在C ++中,
之间有什么区别char *a = new char[10];
和
char *a = new char(10);
谢谢!
答案 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 而不是动态分配的数组。 我希望你明白了。