在C++中数组不是按值传递的,传递的是第1个元素,即第0个元素的指针。
1、数组长度不是参数类型的一部分,函数不知道传递给它的数组的实际长度,因此当编译器对实参类型进行参数类型检查时,并不检查数组的长度。等价于数组的长度与参数声明无关,以下三个声明是等价的:
1),void func(int *);
2),void func(int []);
3),void func(int[10]);
2、有时,在向函数传递实参时需要知道长度,例如C风格字符串是字符的数组,它用一个空字符编码作为结尾。提供的机制是提供一个含有数组长度的额外参数。
void func(int [],int size);
3、当参数是一个数组类型的引用时,数组长度成为参数和实参类型的一部分,编译器检查数组实参的长度与在函数参数类型中指定的长度是否匹配。
void func(int (&a)[10]);//不能写为&a[10],因为下标操作符的优先级高
int main(){
int j[2];
func(j);//错误:实参不是10个int
return 0;
}