7.1 函数的定义
函数由函数名以及一组操作数类型唯一地表示。函数的操作数,也即形参(parameter),在一对圆括号中声明,形参与形参之间以逗号分隔。函数执行的运算在一个称为函数体(function body)的块语句中定义。每一个函数都有一个相关联的返回类型(return type)。
int gcd(int i, int j)
{
while(j)
{
int temp = j;
j = i % j;
i = temp;
}
return i;
}
求两个int型数的最大公约数
1. 函数的调用
调用操作符的操作数是函数名和一组(有可能是空的)由逗号分隔的实参(argument)。
函数调用做了两件事情:用对应的实参初始化函数的形参,并将控制权转移给被调用函数。主调函数(calling function)的执行被挂起,被调函数(called function)开始执行。
2. 函数体是一个作用域
在函数体中可以定义变量,在函数体内定义的变量值有在该函数中才可以访问,这种变量称为局部变量(local variable)。
3. 形参和实参
类似于局部变量,函数的形参为函数提供了已命名的局部存储空间。它们之间的差别在于形参是在函数的形参表中定义的,并由调用函数时传递给函数的实参初始化。
实参则是一个表达式。它可以是变量或字面值常量,甚至包含一个或几个操作符的表达式。在调用函数时,所传递的实参个数必须与函数的形参个数完全相同。与初始化式的类型必须与被初始化对象的类型匹配一样,实参的类型也必须与其对应形参的类型完全匹配:实参必须具有与形参类型相同、或者能隐式转换为形参类型的数据结构。
7.1.1 函数返回类型
函数的返回类型可以是内置类型(如int或者double)、类类型或复合类型(如int&或string*),还可以是void类型,表示该函数不返回任何值。
函数不能返回另一个函数或者内置数组类型,但可以返回指向函数的指针,或指向数组元素的指针的指针。
函数必须指定返回类型(区别于Python)
7.1.2 函数形参表
函数形参表可以为空,但不能省略。没有任何形参的函数可以用空形参表或含有单个关键字void的形参表来表示。
形参表由一系列用逗号分隔的参数类型和(可选的)参数名组成。如果两个参数具有相同的类型,则其类型必须重复声明。
参数表中不能出现相同的参数。类似地局部于函数的变量也不能使用与函数的任意参数相同的名字。
参数名是可选的,但在函数定义中,通常所有参数都要命名。参数必须在命名后才能使用。
C++是一种静态强类型语言,对于每一次的函数调用,编译时都会检查其实参。