现在的位置: 首页 > 综合 > 正文

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

2013年10月13日 ⁄ 综合 ⁄ 共 1136字 ⁄ 字号 评论关闭

一、一维数组做参数

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

抱歉!评论已关闭.