函数
1.避免重复性代码
2.让代码模块化
1、函数的定义
先定义再使用
函数类型 函数名(数据类型1 形式参数1, 数据类型2 形式参数2,.....)
{
函数体;
return 返回值;
}
注意:
1.函数类型不写,默认为int类型
2.如果不想返回结果,函数类型需要写成void类型
2、函数的调用
函数名(实参1, 实参2, 实参3, ..);
注意:
1.函数调用时实参个数必须与形参个数一致
2.如果实参类型与形参类型不匹配,那么会将实参类型强制转换为形参类型
3、函数的声明
函数类型 函数名(数据类型1 形式参数1, 数据类型2 形式参数2, ...);
主调函数:主动调用函数的函数
被调函数:被调用的函数
被调函数在主调函数的下方定义,需要将被调函数声明
4、变量的作用域及生存周期
作用域:变量能够使用的范围
生存周期:从变量被分配空间一直到空间被回收的整个过程
5、变量的存储类别
全局变量:作用域在全局均可以使用
局部变量:作用域在局部范围可以使用
1.auto(默认)
自动变量(局部变量)
局部变量作用域:在该变量定义最近的大括号内,超过大括号范围不能使用该变量
1.未经初始化值为随机值
2.执行到变量定义时为变量开辟空间
3.超过变量作用域回收变量空间
2.register
寄存器变量
如果寄存器存满了,则将变量存放在栈区中等价于auto类型
3.extern
外部变量
声明一个变量是外部存储的变量
声明外部存储的函数
定义:之前变量是不存在的,定义该变量为变量分配内存空间
声明:之前变量是存在的,声明该变量的类型,同时声明变量是存在的
4.static
静态变量
1.未经初始化值为0值
2.在编译时分配内存空间,程序执行结束回收空间
3.限定变量或者函数只能在本文件中使用
4.防止多文件全局变量函数重名
6、函数传参
1.值传递(复制传递、赋值传递)
实参将值传递给形参
函数体内想使用函数体外部变量值的时候
2.全局变量传递
3.整形数组的传递
int a[5] = {1, 2, 3, 4, 5};
int fun(int array[], int len);
注意:
数组传参,函数体内可以按照函数体外的方式操作数组
7、递归函数
函数体在定义时调用函数体本身
注意:
1.递归函数一定要有结束条件
2.避免深层次的递归
8、宏
1.不带参宏
2.带参宏(宏函数)
带参宏和函数的区别:
1.函数是有参数类型、返回值、调用相关概念,带参宏是没有的
2.宏函数是在编译的时候加载到程序中,函数是在运行时加载到程序中
3.宏函数会使代码体积增大,函数不会使代码体积增大
4.宏函数执行效率高,函数因为有调用和传参的过程会占用系统资源开销,所以执行效率低一些