2011-11-11 36 views
6

Occasionaly,我做了一个错字在一个地方我的程序代码:我真的可以用圆括号初始化一个数组吗?

int a = 10; 
char* b = new char(a); 

错误是显而易见的:我写的(),而不是[]。奇怪的是...代码编译好了,它在调试器中运行正常。但是,在调试器外部编译的.exe函数在执行完这些行之后崩溃了一会儿。

第二行代码真的合法吗?如果是,编译器意味着什么?

回答

10

它是一个单个字符,其数值为a,在这种情况下为10。指针不仅指向数组,你知道。

5

您正在分配一个单个char并为其分配值为a。它根本不分配数组。

这与调用任何其它类型的new表达构造:

std::string* s = new std::string("foo"); 
int* i = new int(10); 
std::vector<std::string>* v = new std::vector<std::string>(5, "foo"); 
2

char t(a)创建初始化为a值本地字符。
new char (a)创建一个动态分配的char,初始化为a的值。

相关问题