基础备忘:数组做为函数参数

来源:互联网 发布:2017广西广电网络快吗 编辑:程序博客网 时间:2024/05/16 09:08

一、一维数组做参数

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");    }


原创粉丝点击