一、一维数组做参数
1) 用数组名做为函数参数时,不是进行值传,而是地址的传递,也就是说把实参数组的首地址赋予形参数组名。例如,下面语句声明了一个数组为函数参数的func().
int func(int a[10]);
2) 用数组做为函数参数,其长度是没有意义的。也就是说上面的函数声明与下面的声明是等效的。
int func(int a[]); int func(int a[100]);
3) 编译器会自动把数组参数当做指针进行解释,这个指针指向一块连续的内在。而这样的一个指针中不会保存长度信息。所以函数声明时,数组参数的长度是没有意义的。为了解决这个问题,可以在参数列表中附加一个长度参数。如:
int func(int a[],int n);//n表示数组长度
下面是一个一维数组的例子,由于传的是指针,所以操作的是同一个地址块,调用func后main函数中的a[]的值也发生改变。
#include<iostream> using namespace std; void func(int a[],int n) { for(int i=0;i<n;i++) { cout<<a[i]; a[i]=a[i]+1; } cout<<endl; } int main() { int a[5]; for(int i=0;i<5;i++) cin>>a[i]; func(a,5);//数组做参数,传数组名,操作的是同一个地块块 for(int i=0;i<5;i++) cout<<a[i]; cout<<endl; system("pause"); }
二、传递多维数组
在C++中,除了可以传递一维数组参数外,还可以传递多维数组参数。以二维数组为例,在传递二维数组参数时,需要数组形参明确最后一维的大小,否则会出现编译错误。同时还需要提供每一维的大小参数。
#include<iostream> using namespace std; void func(int a[][3],int m,int n)//a[][3]明确最后一维大小 { for(int i=0;i<m;i++) for(int j=0;j<n;j++) a[i][j]=a[i][j]+1; } int main() { /* int a[3][3];//在声明时初始化才能把第一维的大小省了,如a[][3]={1,2,3,4,5,6,7,8,9}; for(int i=0;i<3;i++) for(int j=0;j<3;j++) cin>>a[i][j];*/ int a[][3]={1,2,3,4,5,6,7,8,9}; func(a,3,3);//这里只需要数组名就可以了 for(int i=0;i<3;i++) { for(int j=0;j<3;j++) cout<<a[i][j]<<" "; cout<<endl; } system("pause"); }