我由於是完全重複讀取質詢時已關閉該爲什麼decay指向數組參數的指針似乎不適用於sizeof()?
When a function has a specific-size array parameter, why is it replaced with a pointer?
和
How to find the 'sizeof' (a pointer pointing to an array)?
但看完這個我仍然是如何的sizeof混淆()作品。我知道將一個數組作爲參數傳遞給函數,如
void foo(int a[5])
將導致數組參數衰減爲指針。我在上面的兩個問題鏈接中沒有找到的是一個明確的答案,爲什麼sizeof()
函數本身免於(或至少看似免除)該指針衰減行爲。如果的sizeof()的表現就像任何其他功能然後
int a[5] = {1,2,3,4,5};
cout << sizeof(a) << endl;
然後上述應該輸出4
代替20
。我錯過了一些明顯的東西,因爲這似乎是指針行爲衰退的矛盾嗎?對不起再次提出這個問題,但我真的很難理解爲什麼會發生這種情況,儘管多年來一直很高興地使用這個功能而沒有真正考慮它。
注意:'void foo(int(&a)[5])'不會*導致數組參數衰減。這是重要的目標,而不是來源。 – Xeo
'void foo(int a [5])' - 我真的希望參數表單不會被棄用,只允許使用「void foo(int * a)」形式,它只會導致混淆。我不在乎誰破解了代碼。 –