2017-06-22 79 views
1

我想學C++初學者。道歉,如果我的問題沒有適當的結構?我用陣列的工作,結果發現,我可以操作存儲在通過的功能的數組中的值,而無需使用&或參照符號傳遞。我不明白這是怎麼可能的,因爲缺乏&標誌意味着它是按值傳遞和複製由被操縱。數組如何通過引用或值或指針在C++中傳遞?

在其他地方,我讀了數組由指針傳遞的,如果這是我沒有使用任何明確的非關聯化來操作數據的情況。你能解釋一下當我傳遞數組時實際發生了什麼嗎?

邊注:爲什麼我有指定列大小傳遞一個二維數組到一個函數是什麼時候?

+0

陣列可以衰減到一個指向第一個元素的指針,它是通過值傳遞給函數的指針。這個指針衰減是避免原始數組和使用適當的容器類型的原因之一(可能是'std :: vector') – user463035818

+0

數組是通過指針傳遞的。如果你使用arr [i],它相當於*(arr + i),其中arr是數組的起始地址。 – user1438832

+1

...我不應該在評論中回答,但我確信有一個完美的重複,只是沒有找到它atm – user463035818

回答

2

C-陣列衰變到指針。

一些聲明誤導太

void foo(const char name[42]); 

實際上

void foo(const char* name); 

只有參考/指針(難看的語法:/)允許以保持尺寸:

void foo(const char (&name)[42]); 
void foo(const char (*name)[42]); 
+0

仍然看起來比'void foo(const char [42]&name)'更好,或者是它...... – DeiDei

+0

這就是你應該使用'std :: array''而不是''T [] '':它不那麼令人困惑,因爲它不衰減 – nefas