习题答案请参考:C++ Primer 第五版 第6章 6.1 函数及函数定义及调用习题答案
目录
6.1 函数基础
函数定义
(1)函数返回类型;(2)函数名称;(3)函数形参列表:0个或者多个都可以;(4)函数体:执行功能
函数调用
函数名称(实参列表)
例子:
编写函数:求1*2*3*4*5 =120
int fact(int val)
{
int ret = 1;
while(val > 1)
ret *= val--;
return ret;
}
调用函数:
int main()
{
int j = fact(5);
cout << "5! is" << j << endl;
return 0;
}
函数的形参和实参
(1)数量和类型必须对应
(2)形参列表,必须有类型声明,即使类型相同,也必须同时声明,如int f4(int v1, int v2)(这里是一个细节,一定得注意!!)
函数的返回类型
(1)特殊的返回类型:void——表示无返回值
(2)函数和数组不能作为函数的返回类型,指向函数和数组的指针或引用可以作为返回类型(这里也是一个细节,要注意!!)
局部静态对象
使得局部变量的作用域贯穿函数调用及之后的时间,则就将局部变量定义成static类型获得局部静态对象(作用域贯穿整个程序,程序终止才会被销毁)(细节,注意!!)
例子:统计函数被调用多少次
将局部变量定义为局部静态变量:
# include <iostream>
#include <string>
#include <vector>
using namespace std;
size_t count_calls()
{
// 局部静态变量,调用结束后仍然有效
static size_t count = 0;
return ++count;
}
int main()
{
for (size_t i = 0; i != 10; ++i)
cout << count_calls() << endl;
return 0;
}
运行结果
对比,局部变量未定义为静态局部变量 :
# include <iostream>
#include <string>
#include <vector>
using namespace std;
size_t count_calls()
{
// 局部变量,调用结束后就销毁
size_t count = 0;
return ++count;
}
int main()
{
for (size_t i = 0; i != 10; ++i)
cout << count_calls() << endl;
return 0;
}
通过对比,可以明显发现静态局部变量的作用!!!
函数声明
(1)函数在使用时必须进行声明
(2)函数声明无须函数体,也可以省略形参(细节,注意!!)
(3)在声明时,最好带上形参有助于我们理解
例子:上边的例子,计算函数调用次数的函数
size_t count_calls()
{
// 局部变量,调用结束后就销毁
size_t count = 0;
return ++count;
}
声明时为:size_t count_calls()
头文件中进行函数声明
(1)将函数声明放在头文件中
(2)定义函数的源文件中一定得包含声明函数的头文件(细节,注意!!)
例子:
# include <iostream>
using namespace std;
int fact(int val); //阶乘函数的声明,val可以省略,但最好加上
int abs(int val); // 求绝对值的函数声明