数组作为函数参数,传递的是 数组首地址,并非数组本身! 也可理解为: 数组作为参数传递时,会退化为指针,并不能得到数组的大小。
void func(int a[])
{
cout<<sizeof(a)<<endl;
}
int main()
{
int a[5];
func(a); //输出结果是 指针的大小(4个字节),并非是数组的大小
}
void func2(int a[5])
{
cout<<sizeof(a)<<endl;
}
int main()
{
int b[6];
func2(b); //输出 还是 指针的大小(4),因为是 值传递,还是把a转换成了指针。
}
void func2(int (&a)[4]) //传递的是 数组引用
{
cout<<sizeof(a)<<endl;
}
int main()
{
int b[4];
func2(b); //这里终于可以输出 b的字节,但是func2函数对参数大小有要求,必须是4
}
指针作为函数的参数,传递的是变量的地址。 如果函数中对这个地址的元素有该更改操作,那么这个位置的元素真的会被改变,而如果不是传入的指针,那其实是函数收到这个参数后,又重新复制了另一个变量,将参数这个值赋值给他新申请的变量