一、一维数组做参数
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");
}
![](https://img-my.csdn.net/uploads/201208/19/1345374957_2080.jpg)