第7章 函数--C++的编程模块
7.1 复习函数基本知识
7.1.1 定义函数
无返回值的函数。
void functionName(parameterList)
{
statement(s)
return; //optional,可写可不写
}
有返回值的函数
typyName functionName(parameterList)
{
statement(s)
return value;
}
执行完第一个return结束。
7.1.2 函数原型和函数调用
函数原型描述了函数到编译器的接口。
函数原型的语法:
最简单的做法:复制函数定义中的函数头添加分号。
7.2 函数参数和按值传递
普通的函数调用时传递的是变量值,而不是变量本身。
7.2.1多个参数
多个参数只需要 用,分开即可
注意对应顺序。
7.3函数和数组
7.3.1函数如何使用指针来处理数组
大多数情况下C++将数组名视为指针。
但是也有一些例外。
一般传递数组参数使用 (int array[],int n) 这样的格式
虽然,(int * array, int n)也可。
7.3.2 将数组 作为参数传递,实际上传递了数组的地址值。
也就是说,函数可以(通过地址)修改、使用原始数组的值。
为了防止恶意破坏原始数组,可以用const前缀保护数组(禁止修改)。
E: void show_array(const double ar[], int n);
7.3.4 使用数组区间的函数
传递两个指针(开头最后)确定数组元素区间(range)
7.3.5 指针和const
const和指针有一些微妙之处。
常用的格式:
const int *pt = &age; pt是个指向const int 的指针,意味此值是固定的,无法使用pt修改,但是pt本身是个普通指针,pt的值可以修改(如指向其他变量,pt=&sage;)
int * const ps = & sloth;
ps指针是固定的(不可修改),而它指向的元素是普通元素(可以修改)。
7.4 函数和二维数组
常用的格式
int sum(int ar2[][4], int size);
7.5函数和C-风格字符串
字符串传递参数都是传递char指针(char*)。
返回字符串是靠返回字符串的地址。当该字符串不再需要时,使用delete[] 释放内存。
7.6函数和结构
7.6.1 传递和返回结构
类似基本类型。
如定义了一个struct time
可以把time当成int一样,
time sum(time t1, time t2);
7.6.3传递结构的地址
传递结构地址(指针),
使用->访问成员。
可以使用const保护
7.7函数和string对象
与结构相似。
7.8函数和array对象
E:声明
void show(std::array<double, 4> da);
void fill(std::array<double, 4> *pa);
调用:
show(expense);
fill(&expense);
7.9 递归
函数自身可以调用自身。
E:
void recurs(argumentlist)
{
statements1
if(test)
recurs(arguments)
statements2
}
7.10 函数指针
7.10.1 函数指针的基础知识
1.获取函数地址
函数名即函数地址。
2. 声明函数指针
指定指针指向的类型,参数列表
double pam(int );
double (*pf)(int);
实际上,将函数名换为(*pf)即可声明函数指针。
3. 通过指针调用函数
使用*pf时,看成是函数名即可。也可以不加*。