【发布时间】:2011-04-23 13:17:44
【问题描述】:
在C++中,有什么区别
char *a = new char[10];
和
char *a = new char(10);
谢谢!
【问题讨论】:
标签: c++
在C++中,有什么区别
char *a = new char[10];
和
char *a = new char(10);
谢谢!
【问题讨论】:
标签: c++
第一个分配 10 个字符的数组。第二个分配一个初始化为 10 的字符。
或者:
第一个应替换为std::vector<char>,第二个应放入智能指针中。
【讨论】:
new char[10];
动态分配一个 char[10](char 数组,长度为 10),具有不确定的值,而
new char(10);
再次,动态分配单个字符,整数值为 10。
【讨论】:
char *a = new char[10];
...
delete [] a;
上面动态分配和释放10个连续的内存槽,可以用来存储chars。
char *a = new char(10);
...
delete a;
上面动态分配和释放一个内存槽,初始化为整数值10,相当于char值'\n'。
如果您不了解指针,请勿使用std::vector<T>。了解内存分配和指针的工作原理将使您成为更好的程序员。
【讨论】:
'\n' 不一定是 10,这取决于您的字符集。
delete[] a 陷阱
我宁愿使用:
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 会为您处理这些。 下一个优点是您可以使用所有的 stl 字符串函数
【讨论】:
好吧,第一个将创建一个数组。 但我想你的问题主要是在第二个问题上。 您的代码可以将其用作有效字符,请考虑:
char * x ;
cin >> *(x=new char()) ;
将动态生成一个字符,然后从标准输入中读取它。
【讨论】:
[10] 定义了一个数组,其中 as (10) 为新创建的(单个)字符赋值。
如果你想在 C 中声明一个大小为 10 的数组并且错误地定义了 char a(10), 编译器会抛出语法错误,因此您可以修复它。 但是在 C++ 中,它会编译得很好,并且您的程序可能会在访问 a[1] 或 deleting a.
时崩溃所以在 C++ 中,使用 vector 总是比使用动态分配的数组更好。 我希望你明白了。
【讨论】: