自定义函数:
(1)封装简化有规律或重复的代码,提高代码的复用性。
(2)划分模块,提高代码的可读性。
1.函数的自定义
返回值类型 函数名 (数据类型1,数据类型2) 形参列表 //函数首部
{
语句块; //函数体
return 值;(常量,变量,表达式) //void 没有返回值,不写或者return ;
}
eg:int ret = add (1,1);
返回值类型:返回值是函数执行结束返回给调用者的结果。
函数名:函数名是标识符的一种。
形参列表:参数是函数执行过程中所需要的一些必要信息。
函数体:定义了函数实现自身功能的逻辑代码。
注意事项:
1.当函数返回值类型不为void时,必须写return值否则是一个不正确的值;为void时最好return ;
2.当函数返回值不写时,编辑器默认为int类型
3.当函数返回值类型与实际返回值的类型不一致时,以返回值类型为准,会发生数据类型隐式转换
2.函数的调用
函数名(agr1,agr2,...);实参列表
agr1:需要的是一个值(常量,变量,表达式,函数调用)
注意事项:但函数调用时传递的实际参数类型与形参不一致时,以形参类型为准,发生数据类型的隐式转换
3.函数传参:数量一致类型匹配
1)值传递(赋值传递)
实参将值传递给形参,形参的空间与主调内实参的空间相互独立,仅存在拷贝关系。
2).全局变量传参
利用全局变量的全局作用域,在两个函数间进行读写实现信息传递
3)数组传参
数组作为函数参数传递的时候传递的是空间的编号
arry(基地址)[1(偏移量)]
4.函数的声明
在函数调用前一定要函数的声明
声明和定义:
定义一般会开辟对应空间;声明一般不会开辟对应空间
声明可以有多次,定义只能有一次
变量的存储类型
1.auto(自动的变量、局部变量、默认):存放在系统栈空间,由操作系统自动管理
2.register(建议性:寄存器变量):将数据变量存放在寄存器内
3.static(静态变量):
(1)修饰局部变量,称为静态变量,保存数据区,具有和全局变量一样的生存周期,作用域不变
(2)修饰全局变量,不改变生命周期,限制在本文件使用
(3)修饰函数,限制在本文件使用
4.extern(外部变量)
extern修饰全局变量,声明此变量的定义在外部文件,
extern修饰函数,声明此函数的定义在外部源文件
作用于与生命周期
1.作用域:变量在程序中所能使用的范围
局部变量:
1.局部变量的作用域从定义开始到离他最近的花括号结束
2.作用域重叠时,最近的变量作用域会屏蔽较远的
全局变量:
全局变量的作用域,从定义开始到在整个.c结束
函数:
函数的作用域,从定义开始到在整个.c结束;如果调用不在作用域会产生隐士声明;需提前声明
2.生命周期:变量从开辟内存到回收的整个过程。
局部变量:
从程序执行到定义时开辟内存空间,到离开作用域回收空间
全局变量
从编译阶段开辟内存空间(分配好了存储位置),到整个应用程序结束回收空间