C++ Primer Plus笔记-----第七章 函数

1、函数和数组

int sum_arr(int arr[],int n)

//函数声明时,arr实际并不是表示一个数组,而是一个指针,此时的arr[]表示数组第一个元素的地址,也就是数组的起始地址;
//在编写函数的其余部分时,可以将arr看成一个数组

仅当用于函数头或函数原型中,才等价于

int sum_arr(int *arr,int n)

1.1 c++将数组名解释为其第一个元素的地址,如

cookies=[1,2,3,4,5,6,7,8];
cookies==&cookies[0];
//数组声明使用数组名来标记存储位置,如 int sum_arr(int arr[],int n)
//对数组名使用sizeof 将得到整个数组的长度,如sizeof(cookies)=32(每个int 字节为4)
//而sizeof(arr)=4, 则只表示指针变量的长度

记住以下两个恒等式

arr[i]==*(arr+i);//数组arr中下标为i的值
&arr[i]==arr+i;//数组arr中下标为i的地址

1.2 将数组作为参数的优点

将数组地址作为参数可以节省复制整个数组所需的时间和内存

1.3 使用数组区间函数表达数组

以对数组求和为例,函数原型声明如下:

int sum_arr(const int *begin,const int *end);
//等价于
int sum_arr(const int *arr,const int n);
int sum_arr(const int arr[],const int n);

函数功能实现:

int sum_arr(const int *begin,const int*end)
{
	const int *pt;//pt为指针,*pt为指针指向的值
	int total=0;
	for(pt=begin;pt!=end;pt++)//end 为指向最后一个元素之后的一个指针
	{
	total+=*pt;
	}
	return total;
}

1.4 指针和const
待补充,p183

2、函数和二维数组

函数声明

int data[2][4]={{1,2,3,4},{2,3,4,5}};
int total=sum(data,2);
//函数声明原型:
int sum(int (*arr)[4],int size);
//等价于
int sum(int arr[][4],int size);

函数实现

int sum(int arr[][4],int size)
{
	int total=0;
	for(int r=0;r<size;r++)
		for(int c=0;c<4;c++)
			total+=arr[r][c];
	return total;
}

3、函数和结构体

3.1传递和返回结构

结构体定义

struct travel_time
{
	int hours;
	int mins;
};//别忘了分号

与结构体有关的函数声明

travel_time sum(travel_time t1,travel_time t2);//求和声明 返回值类型为travel_time

travel_time 可被用来声明变量、函数的返回值和函数的参数类型
由于total和t1,t2变量是travel_time结构,可以对成员(mins)使用句点成员运算符;

travel_time sum(travel_time t1,travel_time t2)
{
	travel_time total;
	
	total.mins=(t1.mins+t2.mins)%60;
}

3.2 传递结构的地址
p192

4、递归

5、函数指针

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值