为了达到代码的复用性和方便代码的维护,通常我们会将一段具有功能性的代码封装起来,称之为函数,需要使用到的时候就能通过在主函数main中进行调用即可。
函数又分为库函数与自定义函数。库函数是c语言中已经封装好的函数,可以按照语法规范要求使用即可;而自定义函数则是可以按照相应需求封装好想达到相应目的代码的函数,可用性更高。
函数的结构为:
返回值数据类型 函数名(形参列表)
{
函数体 -- 功能代码逻辑
}
自定义函数的时候需要注意三个点:1.返回值数据类型;2.函数名;3.形参列表
1.返回值数据类型:根据具体需求确定好是否需要返回值,具体返回值使用return 返回即可。
2.函数名:使用驼峰命名法对函数功能进行大概取名,最好使用单词。
3.行参列表:需要对相应数据进行处理时则需要使用到形参列表,让函数在作用域中开辟内存区存放相应数据,并进行功能实现。仅是printf输出文字的话可以不放形参列表。
定义函数
在定义相应函数之前在上方进行注释/**/,在注释中分析好所定义的函数的功能,函数名,函数形参列表,函数返回值。
在根据相应函数需求对函数体进行封装,达到所需要求。
定义好函数后就是函数的调用
函数调用:在主函数中将数据通过形参输入函数中,执行函数体,有返回值发给给他的调用者,没有返回执行结束。
调用格式为:函数名(实参列表);
函数的实参列表和形参列表在个数 顺序 类型要严格一致。
函数名(实参列表);
无形参无返回值: void show(void){...} show();
有形参无返回值: void test(int n){....} test(10);
无形参有返回值: int rand(void){....} int res = rand();
有形参有返回值: int add(int a,int b){....} int res = add(3,5);
函数声明:
在具体项目中,为了方便bug修复和管理,通常会进行模块化,会将函数定义与函数声明放到不同的文件当中,函数定义放在.c文件当中,而函数声明则会放在.h文件当中。使用相应函数的时候只需在main函数前头文件上引入相关.h文件即可。
函数调用流程:
1、给形参分配空间
2、将实参的值传递给形参
3、执行函数体
4、结束的时候回收形参和局部变量的空间
值传递和地址传递
区分清楚参数传递的是值还是地址值。
值传递:实参将数值传递个给形参后,实参和形参就没有关系
地址传递:将外部空间的地址传入到函数内部,函数内部通过 解地址 获取外部空间,操作外部空间