2011-11-11 74 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的值。

相關問題