1、函数的使用:

使用函数的步骤:声明 + 定义 + 调用

声明是为了让编译器知道函数的存在,一般写在头文件中。

如果一个函数只提供了声明,没有提供定义,调用的时候会产生无法解析的外部符号。

一个函数只进行了声明和定义是不会自动执行的,必须通过函数调用语法。调用语法 函数名(实参)。

retType funName(argType1 argName1, …)
{
return xxx;
}

2、变量的类型:

2.1 全局变量(0): 定义在所有或括号之外的变量,通常使用 g_ 前缀
2.1.1: 作用域: 定义的位置开始到所在【文件】的结束
2.1.2: 生命周期: 程序的开始到程序的结束
2.1.3: 存在外部链接的,意味着可以通过 extern 被其他文件使用
2.2 静态全局变量(0): 在全局变量的基础上添加 static 关键字
2.2.1: 作用域: 定义的位置开始到所在【文件】的结束
2.2.2: 生命周期: 程序的开始到程序的结束
2.2.3: 不存在外部链接的,意味着其他文件不知道它的存在
2.3 局部变量(0xcc): 定义在任何一个花括号内的变量
2.3.1: 作用域: 定义的位置开始到所在【花括号】的结束
2.3.2: 生命周期: 进入所在的花括号到离开花括号
2.3.3: 当全局变量和局部变量同名的时候,会隐藏全局变量
2.4 静态局部变量(0): 在局部变量的基础上添加 static 关键字
2.4.1: 作用域: 定义的位置开始到所在【花括号】的结束
2.4.2: 生命周期: 程序的开始到程序的结束
2.4.3: 无论进入这个花括号多少次,静态局部变量只会被初始化一次

3. 指针基础: 用于保存变量地址的特殊数据类型

3.1: 一个指针会包含 3 个信息: 自己的地址(&p) 指向的地址(p) 指向的地址保存的值(p)
3.2: 通过指针可以达到简介修改被指向内容的目的,使用
p = xxx;
3.3: 指针使用较多的地方是作为参数进行传递,通过形参间接的修改实参
3.3.1: 值传递通常传递的变量或常量本身: f(1) f(n)
3.3.2: 指针传递通常传的是变量的地址: f(&n) f(&p)

4. 宏定义: 使用预处理指令 #define 实现出来的语法

4.1 有参宏
4.1.1: 有参宏只是简单的替换,不会事先进行算数运算
4.1.2: #define CUBE(x) ((x)(x)(x)),正确的形式,应该是为每一个子表达式添加括号
cube(3) -> xxx -> 333 -> 27
cube(3+5) -> xxx -> 3+53+53+5 -> 38
4.2 无参宏:
4.2.1: 将较多使用经常修改的值定义成宏,在后续需要修改的时候只要修改宏就行了(数组大小)
4.2.2: 定义一组只需要关注名称而不需要了解值的常量(菜单项)
4.2.3: 用于定义一组之间存在关联的数值