C语言第八章:函数概念递归函数内联函数
Posted 歌咏^0^
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言第八章:函数概念递归函数内联函数相关的知识,希望对你有一定的参考价值。
前言:
C语言是面向过程的模块化语言
目录
一、函数
所谓的函数就是 将一系列功能 进行封装,也就是说,函数实际上就是将一块代码进行包装起来。
二、分类
系统函数: 也就是操作系统已经封装好的函数,我们只需要进行调用即可
库函数:
系统调用接口:----linux内核提供的接口
自定义函数:程序猿自己封装定义的函数
一次开发: 研究源码: 芯片源码
1.5次开发: 芯片源码的基础上进行 编程
二次开发人员: 应用层开发
三、如何设计一个函数
1、需求分析
1)首先你得知道你设计这个函数用来完成什么事情(函数的作用)
2)完成这个事情需要什么资源-----参数列表
3)具体实现的过程----函数的源码
4)最后完成这个事情之后,会反馈一个结果(函数的返回值)
2、格式
关键字 返回值类型 函数名(参数列表)
{
源码;
return 返回值;
}
函数名: 也就是一块代码的名称,命名使用小驼峰
参数列表 : 调用这个函数的时候,你需要传递什么样的数据参数
数据类型1 变量名1,参数数据类型2 变量名2,参数数据类型3 变量名3
返回值类型: 函数调用结束之后,返回怎样的数据类型。跟返回值 是 有关关
有返回值
char ------ return 'c'
int ------- return 100;
float ------return 10.11;
无返回值
void -----return ;
例:
float func(int a)
{
printf("func\\n");
return 1.000;
}
3、 参数的传递(传参):
1)、值传递 2)、地址传递
实际参数(实参): 在调用函数的时候,给这个函数传递的数据(具体的值、地址)
形式参数(形参):在定义函数的时候,里面的参数列表。
1)实参和 形参 一定要一一对应
2)形参一定是由 实参进行初始化
3) 如果 实参是 变量的名字 或者 某个具体的值 ,称之为 值传递
4)如果想要在某个函数中改变其他函数的变量的值,需要进行地址传递
4、特点
1)在函数里面定义的变量,称之为局部变量。随着函数调用而申请内存空间,函数调用结束之后,就会释放内存空间
2)增强代码的可读性
3)降低程序的代码量——实现代码的复用
四、函数的几个概念
1、函数的定义
函数的实现代码块
2、函数的调用
利用函数 实现 某个功能模块
3、函数的声明
告诉编译器,这个函数长什么样子
---函数的声明要放在函数调用之前,一般情况下,放在头文件
注意:函数定义不允许嵌套
五、内联函数
1、概念
由inline关键字修饰的函数,称之为内联函数。类似于宏替换
2、作用
减少函数调用的时候 跳转的时间,实际上是用 空间 (程序尺寸增大)为 代价换取时间效率
3、注意
1)、内联函数一般定义在头文件中,声明也在头文件
2)、内联函数的代码尽量 5行
4、用法
函数频繁被调用
函数的代码量很少
inline int func()
{
}
六、静态函数
由关键字 static修饰的函数,称之为静态函数
作用: 静态函数 仅限于本文件有效,可以防止一个工程项目中多个.c文件的函数名冲突
七、递归函数
1、概念
自己调用自己(直接或者间接调用本身),称之为递归函数
2、设计
(1)问题模型本身要符合递归模型(递推模型)
(2)问题的解,当递归到一定层次时,答案是显而易见的,且能结束函数。
(3)先明确函数要实现的功能与参数的关系,暂不管功能具体的实现。
(4)呈现第n层与第n-1层的递推关系
3、注意
1)递归函数一定要有一个终止条件
2)递归函数不能嵌套太深
补充知识:
1. .dll后缀名——封装成库函数,将源代码文件名改为.dll后缀,可起到保密作用
2. ctrl + f :查找相同词
3.system("clear")——执行linux命令 -----》 头文件 <stdlib.h>
4.头文件:#ifndef //如果没有定义这个宏,执行下面
#define // 定义这个宏
。。。。。(放头文件、变量声明、函数声明、函数定义等)
#endif
作用:防止头文件重复展开
以上是关于C语言第八章:函数概念递归函数内联函数的主要内容,如果未能解决你的问题,请参考以下文章