数组的形参与实参,通过引用传递数组

数组形参:

void printValues(int*);

void printValues(int[]);

void printValues(int[10]);//以上三种是等价的。
通常,将数组形参直接定义为指针要比使用语法定义更好。
第三种方式,形参的长度容易引起误解。
当编译器检查数组形参关联的实参时,它只会检查实参是不是指针、指针的类型和数组的类型是否匹配,而不会检查数组的长度。


数组实参:

和其他类型一样,数组形参可定义为引用或非引用类型。大部分情况下,数组以普通的非引用类型传递,此时数组会悄悄地转换为指针。一般来说,非引用类型的形参会初始化为其相应实参的副本。而在传递数组时,实参是指向数组第一个元素的指针,形参复制的是这个指针的值,而不是数组元素本身。函数操纵的是指针的副本,因此不会修改实参指针的值。然而,函数可通过该指针改变它所指向的数组元素的值。通过指针形参做的任何改变都在修改数组元素本身


通过引用传递数组:

在《C++ Primer 第四版》的第七章208页,讲到了通过引用传递数组,和其他类型一样,数组形参可声明为数组的引用。如果形参是数组的引用,编译器不会将数组实参转化为指针,而是传递数组的引用本身。在这种情况下,数组大小成为形参与实参类型的一部分,编译器检查数组实参的大小与形参的大小是否匹配

int (&a)[13],两边的圆括号是必须的,因为[]的优先级大于&

int &a[13]表示一个指向13个整形引用的数组,而(int &)a[13]表示含有13个整形元素数组的引用

#include<iostream>
using namespace std;

void output(int (&a)[13])
{
	for (int i = 0; i < 13; i++)
		cout << a[i] << " ";
	cout << endl;
}

void modify(int(&a)[13])
{
	for (int i = 0; i < 13; i++)
		a[i] += 1;
}
int main()
{
	int a[13] = {1,2,};

	output(a);
	modify(a);
	output(a);

	return 0;	
}
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值