第7章 函数----C++的编程模块
7.1.1 定义函数
没有返回值的函数被称为void函数,格式如下:
void functionName(parameterList)
{
statement(s)
return; // optional
}
parameterList指定了传递给函数的参数类型和数量。
有返回值的函数将生成一个值,并将它返回给调用函数。
typeName functionName(parameterList)
{
statements
return value; // value is type cast to type typeName
}
7.1.2 函数原型和函数调用
1.为什么需要原型
原型描述了函数到编译器的接口,它将函数返回值的类型以及参数的类型和数量告诉编译器。
3.原型的功能
原型确保以下几点:
- 编译器正确处理函数返回值。
- 编译器检查使用的参数数目是否正确;
- 编译器检查使用的参数类型是否正确;如果不正确,则转换为正确的类型(如果可能的话)。
7.2 函数参数和按值传递
用于接收传递值的变量被称为形参。传递给函数的值被称为实参。
C++标准使用参数(argument)来表示实参,使用参量(parameter)来表示形参。
7.3.5 指针和const
两种不同的方式将const关键字用于指针:第一种方法是让指针指向一个常量对象,这样可以防止使用该指针来修改所指向的值,第二种方法是将指针本身声明为常量,这样可以防止改变指针指向的位置。
int age = 39;
const int * pt = &age;
// pt指向一个const int,因此不能使用pt来修改这个值。*pt值为const,不能修改。
尽可能使用const
将指针参数声明为指向常量数据的指针有两条理由:
- 这样可以避免由于无意间修改数据而导致的编程错误;
- 使用const使得函数能够处理const和非const实参,否则将只能接受非const数据。
如果条件允许,则应将指针形参声明为指向const的指针。
7.5.1 将C-风格字符串作为参数的函数
假设要将字符串作为参数传递给函数,则表示字符串的方式有3种:
- char数组;
- 用引号括起的字符串常量(也称字符串字面值);
- 被设置为字符串的地址的char指针。
7.9.1 包含一个递归调用的递归
void类型的递归函数recurs()如下:
void recurs(argumentlist)
{
statements1
if (test)
recurs(arguments)
statements2
}
7.10.1 函数指针的基础知识
- 获取函数的地址;
- 声明一个函数指针;
- 使用函数指针来调用函数。
7.10.4 使用typedef进行简化声明
typedef double real; // makes real another name for double