有两种传递方法,
function(int arr[]);
function(int arr);//第二种,传址调用,无需再说。
第一种,数组的数据将其一一赋值浪费空间,所以数组作为参数传递给函数的只是数组首元素的地址,数据还是在内存里的,函数在需要用到后面元素时再按照这个地址和数组下标去内存查找。也就是说后面的元素根本没到函数里来。这里也不能在函数内部用sizeof求数组的大小,必须在外面算好了再传进来。
PS:
1.在以上两个函数的形参前面加上const则表示整个数组只读,而不是只有首地址对应存储的数据只读。
2.第二种形式不能用C++11中的for(auto i:a){}来循环打印。
3.数组的大小要用sizeof()来求,不能用.size(),.size()容器可以用, vector是容器。
4.如果在函数内部又声明一个int tmp类型的变量,然后把p赋值给tmp, 通过tmp修改数数组也是一样,都会修改实参本身。因为传的是指针。
总结:帖子是别人的,但上面的雷我昨天几乎都自己踩了一遍,结论就是最好不要在用int a[] 写C++ ,太原生,也不够方便。