什么';新字符[10]和新字符(10)之间的区别是什么 在C++中,有什么不同? char *a = new char[10];

什么';新字符[10]和新字符(10)之间的区别是什么 在C++中,有什么不同? char *a = new char[10];,c++,C++,及 谢谢 第一个分配一个10个字符的数组。第二个分配一个初始化为10的字符 或: 第一个应替换为std::vector,第二个应放置在智能指针中 new char[10]; 动态分配具有不确定值的字符[10](字符数组,长度10),而 new char(10); 同样,动态分配一个整型值为10的字符。第一个字符将构成一个数组。 但我猜你的问题主要是第二个。 您的代码可以将其用作有效字符,请考虑: char * x ; cin >> *(x=new char()) ; 将动态生成


谢谢

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

或:

第一个应替换为
std::vector
,第二个应放置在智能指针中

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

new char(10);

同样,动态分配一个整型值为10的字符。

第一个字符将构成一个数组。 但我猜你的问题主要是第二个。 您的代码可以将其用作有效字符,请考虑:

char * x ;
cin >> *(x=new char()) ;
将动态生成一个字符,然后从stdin读取它

char *a = new char[10];
...
delete [] a;
以上动态分配和释放10个可用于存储字符的连续内存插槽

char *a = new char(10);
...
delete a;
上面动态分配和取消分配一个用整数值
10
初始化的内存插槽,该整数值相当于char值
'\n'


如果不首先理解指针,请不要使用
std::vector
。了解内存分配和指针的工作原理将使您成为一名更好的程序员

我宁愿使用:

size_t size = 10; //or any other size
std::string buff(size, 0); //or: std::string buff(size, '\0');
现在,如果必须使用char*buff,则可以使用:

&buff[0]
buff.c_str()
当您需要使用const char*时,您可以使用:

&buff[0]
buff.c_str()
最大的优点是,您不需要释放内存,stl会为您解决这个问题。
下一个优点是,您可以使用所有stl字符串函数定义一个数组,其中as(10)为新创建的(单个)字符赋值

如果您想在C中声明一个大小为10的数组,并且错误地定义了char a(10), 编译器会抛出语法错误,所以您可以修复它。 但是在C++中,它会编译得很好,程序在访问A(1)时可能崩溃,而删除A/< <>所以在C++中,使用向量而不是动态分配数组总是更好的。
我希望你能理解这一点。

仅仅因为对象的大小为1并不意味着它是字符。此外,如何删除该变量?(不要在不需要时动态分配),“不要忘记删除”->坏C++代码。你是对的,但我只是想向我们的朋友展示,C++的人是为了某种目的而制造的。我不应该在cin中使用它,也不应该引用它。@Green:嗯,这是一个好的开始。+1来自我。当我看到一个完全正确的答案被匿名否决时,我总是把它归为“过关的无知者”。这比现有的答案有什么好处?而你的下半部分纯粹是观点,在现代C++社区中实际上是相当不愉快的。最好是把黑匣子递给人们,然后向他们展示它是如何工作的,以及我们为什么使用它们。手动内存管理是坏的C++,为什么开始教坏C++的人?10个内存槽是连续的,评论STD::(矢量)(10)='\n’~不要因为我伤害了你的感情而投我一票。你在下半年编辑,我编辑了我的评论来匹配。另外,现有的三个答案都说这是一个“数组”。数组总是连续的。另外,
'\n'
不一定必须是10,这取决于你的角色集。你对如何教人的看法也是一种看法。我们会让他决定的。此外,提及删除也很重要。它添加的一点是明确提及删除,尤其是
delete[]a
gotcha也请参见: