7.1复习函数的基本知识
1.使用void函数来执行某种行为。
2.用于接受传递值的变量被称为形参,传递给函数的值被称为实参。
3.原型中的变量名不必与定义中的变量名相同,而且可以忽略。
4.C++对返回值有一定的限制:不能是数组。但是可以是其他的任意一种类型,甚至可以是结构和对象!
5.函数原型常常隐藏在include文件中。
6.为什么需要函数原型:原型描述了函数到编译器的接口,它将函数的相关信息告诉给编译器,以便于使得编译器即使捕捉不符合函数相关要求的错误的信息。
7.函数原型是一条语句,必须以分号结束,同时函数原型不需要提供变量名字(也可以有),有类型列表就足够了。
7.2函数参数和按值传值
1.变量名可以提醒参量和参数之间的对应关系。
2.一个函数既可以接受一个形参,也可以接受两个形参。
7.3函数和数组
1.对于形参中的arr[ ]其代表的并不是一个数组,而是代表一个指针(不过看做是一个数组也毫无大碍),在大多数情况下,C++和C一样,也将数组视为指针,C++将数组名解释为其第一个元素的地址。
2.在C++中,当且仅当用于函数头和函数原型中,int *arr和 int arr[ ]的含义才是相同的。
3.将指针(包括数组名)+1,实际上是加了一个与指针指向的类型的长度(以字节为单位)相等的值。
4.当函数调用数组时,传递的是数组的地址,元素类型,元素数目提交给函数。传递常规变量时,函数将使用该变量的拷贝,而传递数组时,函数将使用原来的数组,所以如果在函数中修改数组的值,则最原始的值也会被修改。
5.为将数组类型和元素数量告诉数组处理函数,应该通过两个不同的参数来传递它们,而不要试图使用方括号表示法来传递数组长度。
6.一般先编写代码时,应该先向该函数需要实现哪些功能,然后完成对应的函数模块,最后通过主函数进行组装,这被称为自下而上的程序设计,因为设计过程是从组件到整体进行的,强调的是数据表示和操控。
7.最好在显示函数中使用const以保证不会修改某些重要的值。
8.C++禁止将const的地址赋给非const指针。
9.const int *p_snack = &gorp 禁止修改p_snack指向的值,但是p_snack可以指向另一个值。 int *const p_snack = &gorp p_snack可以用来修改值,禁止改变p_snack指向的变量。
7.5函数和C-风格字符串
1.表示字符串的方式有三种:
(1)char数组
(2)用引号括起的字符串常量
(3)被设置为字符串的地址的char指针
2.要多使用const字符有利于程序的整体运行。
3.使用new时必须使用delete
7.6函数和结构
1.结构是将数据组合成单个实体或数据对象,该实体被称为一个整体,可以将一个结构赋给另一个结构。
2.数组名是数组第一个元素的地址,而结构名只是结构的名称,要获得结构的地址,必须使用地址运算符&,因此在main()函数中要用到结构式要在对象前面加上&。
3.当结构比较小的时候,按值传递结构最合理。
4.如何使用cin来控制while循环:while(cin>>x),整个while循环的测试表达式的最终结果为cin,而cin被用于测试表达式中时,将根据输入是否成功,被转换为bool值ture或者false。
5.如果程序在输入循环后还需要进行输入,则必须只用cin.clear()重置输入,比如输入错了一个变量但是不能退出程序还要继续输入正确的变量的时候。
6.当结构比较大的时候,则可以传递结构的地址而不是整个结构以节省时间和空间。
7.7函数和string对象
1.string可以被声明为数组string list[SIZE],其中有SIZE的大小决定可以在list中输入进几个string。
7.8函数与array对象
1.在C++中,类对象是基于结构的。
2.array的结构定义: std::array<double,4> expenses。
7.9递归
1.C++函数有一种有趣的特点——可以调用自己,这种功能被称为递归。
2.递归就是将一个变量正向全部调用一遍然后在反向将变量重新调用一遍。
7.10函数指针
1.函数也有地址,函数的地址是存储其机器语言代码的内存的开始地址,获取函数的地址很简单,只要使用其函数名(后面不跟参数)即可。如thank()是一个函数,则thank则是一个地址。
2.声明指向函数的指针,也必须指定指针指向的函数类型。
double pam(int);
double (*pt)(int);
pf = pam; 其中pt代表对应的函数指针,函数指针对应的是一个函数而不是变量
3.double y = (*pf)(5); 给了强有力的提示,该代码正在使用函数指针。
4.函数指针一般使用在形参之中,就是其中的一个形参是一个函数。
7.11总结
1.函数定义是实现函数功能的代码;函数原型描述了函数的接口:传递给函数的值的数目和种类以及函数的返回类型。
2.在默认情况下,C++函数按值传递函数。