众所周知,函数在传参数时会复制参数,但传指针时,只是复制了指针本身,而没有复制指针指向的值,所以可以通过传指针或引用来使函数内可以修改外部的值。那么,对于数组,会怎样?
上测试程序
#include<iostream> #include<typeinfo> using namespace std; void func(int arr[]){ arr[0]=1; cout<<"type of arr in func : "<<typeid(arr).name()<<endl; cout<<"address of arr in func : "<<arr<<endl; } int main(){ int arr[10]; arr[0]=0; func(arr); cout<<arr[0]<<endl; cout<<"type of arr outside : "<<typeid(arr).name()<<endl; cout<<"address of arr outside : "<<arr<<endl; return 0; }
这段程序定义了一个参数为int数组并修改了这个数组索引为0处的值为1的函数,在主函数中调用了它,并打印相关的信息。
输出:
type of arr in func : Pi address of arr in func : 0x7ffd09a12cb0 1 type of arr outside : A10_i address of arr outside : 0x7ffd09a12cb0 按回车键返回
从输出可以看出,在主函数中,arr的类型为A10_i,即大小为10的 int 数组;而在func函数中,arr的类型为Pi,即 int 指针。这说明了,在函数传参数时,将数组转化为了对应的指针。arr的首地址都是0x7ffd09a12cb0,并且func函数中修改的arr[0]的值成功的影响到了主函数中的arr,这也说明了,函数参数传数组时并没有复制数组,而是传了数组首地址对应的指针。