2012-05-04 26 views

回答

16

你的前提是錯誤的。第一個是指針類型,第二個是好的......沒什麼,它不是有效的C++(C也不是這個問題)。 靜態數組更像是這樣的:

char var[15]; 

動態陣列,另一方面通常vectors完成。

數組和指針之間的混亂是從C編程語言,其中*(a+n)a[n]意思是一樣的遺留,所以我們可以使用a[n]即使a是一個指針,而不是陣列。這在C++中並不是很習慣。

+0

+1感謝你的幫助 –

7

char* var;聲明var是「指向char」的指針。 char var*;不是有效的聲明。

一個數組將被聲明爲:char var[10];

+2

或者類似的東西:'的std ::陣列變種;' – chris

+3

@克里斯,這不是一個數組,這是一個'的std :: array'。但是,我會推薦。 – 2012-05-04 20:41:59

+0

@classdaknok_t,如果您有足夠的資源可以這樣做,那麼這是理想的靜態數組。 – chris

3

這是一個指針:

char* var;

這在語法上是不正確的,將無法編譯:

char var*; 

數組和指針在C++ 是不一樣的東西,但語法可能會使它看起來像它們一樣。您可以在C聲明數組++這樣的:

char ary[] = {'a','b','c'}; 

...這是有效的 - 將有3個元素創建的陣列。

您還可以創建一個函數,它接受一個指針

void foo(char* bar) 
{ 
// ... 
} 

......並把它傳遞ary

foo(ary); 

...,它會編譯並運行良好。這可能會讓你相信指針和數組是相同的東西;但他們不是。 barfoo上面不是數組 - 它是一個指向數組的第一個元素的指針。

+0

值得一提的是,在調用'foo(ary);'時,'ary'衰變爲需要的指針。 – chris