C++中函数的数组形参

函数由函数名以及一组操作数类型唯一的表示。函数的操作数,也即形参(parameter),在一对圆括号中声明,形参与形参之间以逗号分隔。

void swap(int a, int b)
{
   int temp = a;
   a = b;
   b = temp;
}

 

在以上函数中,参数a和b就是swap()函数的形参。当调用该函数时

int i = 1;
int j = 2;
swap(i, j);

 

在以上代码中,i和j是swap()函数的实参。

1 参数传递

每次函数调用时,都会重新创建该函数的所有形参,此时所传递的实参将会初始化对应的形参。

1.1 非引用形参

普通的非引用类型的参数通过复制对应的实参实现初始化。当用实参副本初始化形参时,函数并没有访问调用所传递的实参本身,因此不会改变实参值。

 

 

从图1中可以看出,swap()函数交换的是实参i和j的副本,而不是i和j的本身。

1.2 引用形参

引用形参直接关联到其绑定的对象,而并非这些对象的副本。每次调用函数时,引用形参被创建并与相应实参关联。如果将swap()函数的参数修改为引用形参

void swap(int& a, int& b)
{
   int temp = a;
   a = b;
   b = temp;
}

则调用swap函数的示意图如图2所示。

 

 

从图2中可以看到,swap()函数交换的是实参i和j的本身。

2 数组形参

当要使用数组作为函数形参时,因为一个数组不能使用另外一个数组初始化,也不能将一个数组赋值给另外一个数组,而在“1.1 非引用形参”中提到要用实参的副本来初始化形参,所以实参为数组时,不能直接传递给形参。

那么,如果一个函数需要数组作为其参数,这个函数该如何定义呢?

2.1 参数为数组的函数

例如一个函数的作用是找出数组中的最大数,数组为该函数的参数,则可以用如下三种方式定义该函数:

    int FindMax(int* array);
    int FindMax(int array[]);
    int FindMax(int array[10]);

虽然不能直接传递数组,但是函数的形参可以写成数组的形式。此时,调用该函数是的实参数组被编译器自动转换为指针,也就是说,以上三种定义是等价的,其参数类型都是int*。

调用该函数时,直接将数组名称作为实参即可。

    int array_my[5] = {1, 2, 3, 4, 5};
    int array_maxvalue = FindMax(array_my);

 

2.2 参数为数组引用的函数

 

如果函数的形参时数组的引用,则编译器不会把数组实参转换为指针,而是传递数组的引用本身。

其定义方式为

int FindMax(int(&array)[5]);

调用该函数的方法与“2.1 参数为数组的函数”中的方法相同。

需要注意的时,调用参数为数组引用的函数时,编译器检查实参的大小与形参的大小是否匹配。

int FindMax(int(&array)[5]);

时,调用该函数的形参必须是有5个元素的整形数组的数组名,以下调用方式是错误的。

    int array_my[3] = {1, 2, 3};
    int array_maxvalue = FindMax(array_my);

 

而对于参数为数组的函数

int FindMax(int array[10]);

则没有要求形参和实参的数组元素个数必须对应,以下方式调用则是正确的。

    int array_my[3] = {1, 2, 3};
    int array_maxvalue = FindMax(array_my);

 

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值