## 一.函数
### 1.函数的概念
函数是一个命名的代码块,我们通过调用函数执行相应的代码。函数可以有0个或多个参数,而且(通常)会产生一个结果。
### 2.函数的定义
```c++
返回类型 函数名称(形参列表)
{
//函数体
}
```
其中,**形参列表** 可以为空,但是不能省略。每个形参通常用逗号隔开,且需要指定类型。
### 3.函数的调用
通过函数调用运算符来调用函数。
函数的调用机制:
1. 建立被调函数的栈空间
2. 保护调用函数的运行状态(把PSW的内容写入被调函数)和返回地址(把PC的内容写入被调函数)
3. 传递参数
4. 将控制权转交被调函数
### 4.函数的返回
1. 除了 **数组** 和 **函数** 之外,任何类型均可作为返回类型。
2. 从函数返回值时,会在主调函数与被调函数之间临时开辟一段内存用于存放返回值,再将返回值拷贝到接收返回值的变量。拷贝完毕后删除临时开辟的一段内存。
3. \[11+\][$]**尾置返回类型**
+ 任何函数的定义都能使用尾置返回,一般用于返回类型比较复杂的情况。
+ 尾置返回类型跟在形参列表后面并以一个 `->` 符号开头。为了表示函数真正的返回类型跟在形参列表之后,我们在本应该出现返回类型的地方放置auto。
+ 函数的尾置返回值在函数参数之后,可以使用函数参数。如 `decltype(arg)`
```c++
auto return_a_array_reference() -> int (&)[10];
```
## 二.函数声明
1. 什么时候需要函数声明
>当函数调用点在函数定义点之前时,需要声明函数原型。
2. 函数声明的格式:将函数定义语句复制过来后面加个分号即可,也可以去掉形参名称。
```c++
int fun(int a,int b);//合法的声明语句
int fun(int,int);//合法的声明语句
//定义语句
int fun(int a,int b)
{
}
```
## 三.主函数
+ 每个程序有且只有一个main函数。
+ 每个程序的运行都从main函数开始,到main函数结束。
+ 主函数可以附带两个命令行参数:
+ **argc** 参数的个数
+ **argv** 字符指针数组,参数的内容
>[info]命令行:test.exe cpp is fun
>argc:4
>argv:”test.exe”、”cpp”、”is”、”fun”
- 阅读说明
- 1.1 概述
- C++基础
- 1.2 变量与常量
- 1.2.1 变量
- 1.2.2 字面值常量
- 字符型常量
- 数值型常量
- 1.2.3 cv限定符
- 1.3 作用域
- 1.3.1 标识符
- 1.3.2 *命名空间
- 1.3.3 作用域
- 1.3.4 可见性
- 1.4 数据类型
- 1.4.1 概述
- 1.4.2 处理类型
- 类型别名
- * auto说明符
- * decltype说明符
- 1.4.3 数组
- 1.4.4 指针
- 1.4.5 引用
- 1.5 表达式
- 1.5.1 概述
- 1.5.2 值的类别
- 1.5.3 *初始化
- 1.5.4 运算符
- 算术运算符
- 逻辑和关系运算符
- 赋值运算符
- 递增递减运算符
- 成员访问运算符
- 位运算符
- 其他运算符
- 1.5.5 *常量表达式
- 1.5.6 类型转换
- 第2章 面向过程编程
- 2.1 流程语句
- 2.1.1 条件语句
- 2.1.2 循环语句
- 2.1.3 跳转语句
- 2.1.4 *异常处理
- 2.2 函数
- 2.2.1 概述
- 2.2.2 函数参数
- 2.2.3 内置函数
- 2.2.4 函数重载
- 2.2.5 * 匿名函数
- 2.3 存储和生命期
- 2.3.1 生命周期与存储区域
- 2.3.2 动态内存
- 2.4 *预处理命令
- 第3章 面向对象编程
- 3.1 概述
- 3.2 类和对象
- 3.3 成员
- 3.3.1 访问限制
- 3.3.2 常成员
- 3.3.3 静态成员
- 3.3.4 成员指针
- 3.3.5 this指针
- 3.4 特殊的成员函数
- 3.4.1 概述
- 3.4.2 构造函数
- 3.4.3 析构函数
- 3.4.4 拷贝语义
- 3.4.5 * 移动语义
- 3.5 友元
- 3.6 运算符重载与类型转换
- 3.6.1 概述
- 3.6.2 重载方法
- 3.6.3 类型转换
- 3.7 继承与多态性
- 3.7.1 概述
- 3.7.2 派生类
- 3.7.3 子类型
- 3.7.4 虚基类
- 3.7.5 虚函数
- 3.7.6 抽象类
- 3.8 模板与泛型
- 3.8.1 概述
- 3.8.2 模板类型
- 3.8.3 *模板参数
- 3.8.4 *模板编译
- 3.8.5 *模板推断
- 3.8.6 *实例化与特例化
- 第4章 C++标准库
- 4.1 概述
- 4.2 输入输出流
- 4.2.1 概述
- 4.2.2 *流的状态
- 4.2.3 *常用流
- 4.2.4 *格式化I/O
- 4.2.5 *低级I/O
- 4.2.6 *随机访问
- 4.3 *C输入输出
- 4.3.1 *字符输入输出
- 4.3.2 *格式化输入输出
- 4.4 * 容器
- 4.4.1 * 概述
- 4.4.2 * 基本操作
- 4.4.3 * 顺序容器
- 4.4.4 * 迭代器
- 4.4.5 * 容器适配器
- 4.5 * 泛型算法
- 4.6 * 内存管理
- 4.6.1 * 自动指针
- 4.7 * 其他设施