在 C++中,數組永遠不會按值傳遞,數組是被傳遞為指針的,傳遞的是第0個元素的地址。
例如聲明:void fun(int[10]);
編譯器會視為:void fun(int*);
數組的長度與參數聲明無關,下面三個等價:
- void fun(int[10]);
- void fun(int[]);
- void fun(int*);
因此fun對參數數組的改變將直接應用在數組實參上,如果想防止修改,可以加const。
數組長度不是參數類型的一部分,函數不會檢查長度。
將參數聲明為數組的引用,數組長度就成為參數和實參類型的一部分,編譯器還會檢查數組實參的長度與函數參數類型中指定的長度是否匹配。
// 參數為 10 個 int 的數組 // parameter is a reference to an array of 10 ints void putValues( int (&arr)[10] );//不能寫成&arr[10],因為下標操作符的優先級較高 int main() { int i, j[ 2 ]; putValues( i ); // 錯誤: 實參不是 10 個 int 的數組 putValues( j ); // 錯誤: 實參不是 10 個 int 的數組 return 0; }