2014-05-24 196 views
6

你好,我是在C++初學者,能有人給我解釋一下這個分配一個陣列到另一個陣列C++

char a[]="Hello"; 

char b[]=a; // is not legal 

然而,

char a[]="Hello"; 

char* b=a; // is legal 

如果陣列不能被複制或分配給另一個數組,爲什麼它有可能作爲參數傳遞,其中通過的值的副本總是在方法中進行

void copy(char[] a){....} 

char[] a="Hello"; 

copy(a); 
+0

它是'通過引用' –

+1

關於數組的奇怪規則是從1970年代的C編程繼承而來,沒有人曾經改變過它們,因爲現有代碼太多會破壞。相反,你不希望在C++中使用數組;而是使用'std :: vector',它具有數組在大多數高級語言中執行的行爲。 –

+0

[這個答案](https://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c?rq=1)很長,但它非常值得一讀。你的所有問題都可以在其中回答。 – Praetorian

回答

0

該數組靜默(隱式)轉換爲函數聲明中的指針,並複製該指針。當然,複製的指針指向與原始位置相同的位置,因此您可以通過函數中的複製指針修改原始數組中的數據。

7

它不復制數組;它將它變成一個指針。如果你修改它,你會看到自己:

void f(int x[]) { x[0]=7; } 
... 
int tst[] = {1,2,3}; 
f(tst); // tst[0] now equals 7 

如果你需要複製一個數組,使用std::copy

int a1[] = {1,2,3}; 
int a2[3]; 
std::copy(std::begin(a1), std::end(a1), std::begin(a2)); 

如果你發現自己這樣做,你可能想使用std::array