C++第6章:函数数组形参、可变形参,数组指针

一.数组引用形参和多维数组形参

void print(int (&arr)[10])
{..............}
//如果形参里面是 (int &arr[10]) 这是引用的数组,相对于是包含10个引用的数组,这一般是非法的声明

这样的数组引用形参只能将函数作用于大小为10的数组

传递多维数组形参
其实没有真正的多维数组,多维数组不过是数组的数组,
比如a[10][10],其实就10个数组元素, 每个元素是含有10个元素的数组!
操作数组其实就操作数组的首地址,也就是指向数组首地址的指针
那么:

void print(int (*max)[10])
{.......}
//声明成指向含有10个整数的数组的针织,同理如果这样声明 (int *max[10]) 指的是10个指针构成的数组
//等价定义:
void print(int max[][10])
{......}
//max的声明看起来像一个二维数组,实际上形参是指向含有10个整数的数组的指针,因为编译器会忽略掉第一个维度。
//int a[][]:第一个中括号表示有此二维数组有几行,第二个表示有几列。


二。可变形参
声明成initializer_list 和vector 一样 也是一种模板类型,但其对象中永远是常量值,无法改变其中的值。下列 中li.begein()返回的是首指针。

void sumnuber(initializer_list<int> li)
{
	int sum = 0;
	for (auto beg = li.begin(); beg != li.end(); ++beg)
		sum += *beg;
	cout << sum << endl;
}
	sumnuber({ 1,2,3,4 });
	sumnuber({ 1,2,3,4,5 });*/
	

三.指向数组的指针可以直接用下标访问

int a[] = { 2,4,6,8,0,1,3,5,7,9 };
int *p = a;
p[0]就相当于*(p+0)
p[2]就相当于*(p+2)

数组的两个特殊性质对我们定义和使用作用在数组上的函数有影响,这两个性质分别是:
数组作为形参
不允许拷贝数组;
使用数组时通常会将其转换成指针。
因为不能拷贝数组,所以我们无法以值传递的方式使用数组参数。
因为数组会被转换成指针,所以当我们为函数传递一个数组时,实际上传递的是指向数组首元素的指针。

尽管不能以值传递的形式传递数组,但是我们可以把形参写成类似数组的形式:

//尽管形式不同,但这三个print函数是等价的
//每个函数都有一个const int*类型的形参
void print(const int*);
void print(const int[]);
void print(const int[10])//这里的维度表示我们期望数组含有多少元素,实际不一定

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值