《C++大学教程》第六章:函数和递归入门
1.重要概念
1.1.函数模块化程序有以下几个原因
一是“分而治之”法的使用
二是软件复用
三是避免重复代码
四是把程序分解成有意义的函数也使其更容易调试和维护
1.2.全局函数
像main函数之类的不属于任何类对象函数的函数,他的原型放在头文件中
1.3.数据升级和转换
float -->int 结果可能不正确,应当避免
int --> float 正确,隐式转换
函数调用时实参的类型和个数应当与形参匹配。如果调用时形参个数相同但是实参不能隐式转换成期望类型会发生错误。
2.实例:随机数
2.1.代码详解(两种方式)
#include<cstdlib> //头文件
//方法一
tmp = rand() % 6 + 1; //产生伪随机数,每次运行结果一样
//方法二
srand(static_cast<unsigned int>time(0));//产生随时间变化的种子,传递给rand()
tmp = rand() % 6 + 1; //由于种子是变化的,所以每次运行结果不一样
2.2.补充知识:枚举类型
//基础形式
enum status {a, b, c};
cout << a;//使用时
//作用域限定
enum class status{a, b, c};
cout << status::a;//使用时
//指定数据类型
enum class status : unsigned int{a, b, c}; //默认int
2.3.C++11的随机数
#include<random>
default_random_engine engine(static_cast<unsigned int>(time(0))); //随机数生成引擎,()内为构造函数实参。
uniform_int_distribution<unsigned int> randomInt(1,6);//<>类模板,(1,6)范围。
cout << random(engine); //使用
3存储
3.1.标识符可以作为变量名和函数,还包含以下属性
存储类别,作用域,链接
3.2.存储类别标识符
auto:默认标识符
register:寄存器优化,存储在寄存器中
extern
static
mutable
3.3.作用域
语句块作用域
函数作用域:标签start:或者switch语句中的case。
全局命名空间作用域
函数原型作用域
4函数调用堆栈的活动记录
4.1.堆栈的含义
后进先出的数据结构
4.2.实例
操作系统调用main函数,就会把一条活动记录压到堆栈上,这条操作记录告诉我们如何返回操作系统,并且包含main函数的自动变量空间(会丢弃)
5内联函数
5.1意义
减少函数调用的开销,占用内存大,比宏灵活,可替代宏。
5.2.代码
//函数声明必须和函数体一起
inline test(int x)
{
return x*x;
}