1.函数是什么
函数的概念第一次出现在我们的数学中,例如:f(x)
但是,在C语言中,函数可不同于数学中的函数;C语言中函数就是具有某项功能的代码段,它是C语言管理代码的最小单位(英言是function),早期被翻译成函数,就一直沿用了,现在新的编程语言都翻译成方法。
函数把具有某些功能的若干行代码封装在函数中方便管理代码且方便重复调用
子程序
维基百科中,对函数的定义:子程序
- 在计算机科学中,子程序是一个大型程序中的某部分代码,由一个或多个语句块组成,负责完成某项特定任务,而且相较于其他代码,具有相对的独立性
- 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏,这些代码通常被集成为软件库
2.库函数
2.1为什么会有库函数?
- 在我们学习C语言编程的时候,总是在一个代码编写完成之后迫不及待的想知道结果,想把这个结果打印到我们的屏幕上,这个时候我们会频繁地使用一个功能:将信息按照一定的格式打印到屏幕上(printf)
- 在编程的过程中,我们也会频繁地做一些字符串的拷贝工作(strcpy)
- 在编程的过程中,我们也会计算类如n的k次方这样的运算(pow)
像上面描述的这些基础功能,它们并不是业务性的代码。我们在开发的过程中每个程序员都可能用得到,为了支持可移植性和提高程序的效率,所以C语言的基础库中提供了一系列类似的库函数,方便程序员进行程序开发
2.2认识库函数
库函数不是C语言提供的
C语言标准中预定好,由编译器的厂商提供实现
比如strlen函数,C语言标准规定:
- 函数的功能:求字符串的长度
- 函数名:strlen
- 参数:const char* str
- 返回类型:size_t
当标准规定好后,这时候A厂商和B厂商写出了这个函数,功能一样,但是由于不同厂商的程序员编写方法不同,内部的实现细节可能不同
size_t strlen(const char*str)这就是strlen函数的原型
所有的库函数都在标准库中
2.3如何学习库函数
那么我们怎么学习库函数呢?
这里我推荐大家可以通过一个网站来学习:
2.4C语言中常用的库函数
2.4.1介绍
C语言中,常用的库函数都有:
- I/O函数
- 字符串操作函数
- 字符操作函数
- 内存操作函数
- 时间/日期函数
- 数学函数
- 其他库函数
例如 stdio.h 头文件包含标准输入输出函数
例如 math.h 头文件包含数学相关的函数
2.4.2学习简单的库函数
pow
double pow ( double base , double exponent ) ;
他的意思是求base的exponent次方
pow库函数包含在math.h头文件中
https://cplusplus.com/reference/cmath/pow/
他的使用方法是这样的
#include "math.h" #include "stdio.h" int main(){ pow(x,y);//求x的y次方 return 0; }
这里我们知道他的结果是一个整数,可以强制转换成int型
cplusplus.com/reference/cmath/pow/
strcpy
char * strcpy ( char * destination , const char * source ) ;
把source指向的字符串拷贝到destination的数组空间里面去
strcpy库函数包含在string.h头文件中
举个例子
https://cplusplus.com/reference/cstring/strcpy/
memset
void * memset ( void * ptr , int value , size_t num ) ;
把ptr指向的内存块中前num个字节的内容设置成value值
memset库函数包含在string.h头文件中
https://cplusplus.com/reference/cstring/memset/
3.自定义函数
如果库函数能够干所有的事情,那还要程序员干什么?
所以更加重要的是自定义函数
自定义函数和库函数一样,都有函数名,返回值类型和函数参数
但是不一样的是这些都是我们自己来设计,这给程序员一个很大的发挥空间
3.1函数的组成
ret_typefun_name ( para 1 , * )
{
statement;//语句项
}
ret_type 返回类型
fun_name 函数名
para 1 函数参数
函数参数可以没有,可以是一个,可以是多个
总结一下就是函数有以下四个部分
- 函数名
- 参数
- 返回类型
- 函数体
这四个部分都体现出来,这个函数基本就完成了
4.函数参数
4.1实参和形参
函数的参数分为实参和形参
即实际参数 形式参数
4.1.1实参
真实传给函数的参数,叫实参
实参可以是:常量、变量、表达式、函数等
无论实参是何种类型的量,在进行函数调用的时候,都必须有确定的值,以便把这些值传送给形参
4.1.2形参
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数
形式参数当函数调用完成之后就自动销毁了,因此形式参数只在函数中才有效
4.1.3实参形参的关系
- 函数调用的时候,将实参传递给形参
- 形参其实是实参的一份临时拷贝
因此,对形参的修改,不会改变实参
5.函数调用
5.1传值调用
- 函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参
5.2传址调用
- 传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式
- 这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量
6.函数的嵌套调用和链式访问
函数和函数之间可以根据实际的需求进行组合,也就是互相调用的
6.1嵌套调用
嵌套调用就是某个函数调用另外一个函数
6.2链式访问
把一个函数的返回值作为另一个函数的参数
7.函数的声明和定义
7.1函数声明
- 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了
- 函数的声明一般出现在函数的使用之前,要满足先声明后使用
- 函数的声明一般要放在头文件中
在使用函数之前,先告诉编译器有这个函数
在未来的工程中,代码是比较多的
函数一般是放在.h文件中声明,在.c文件中实现的
7.2函数定义
- 函数的定义是指函数的具体实现,交代函数的功能实现
test.h
放置函数的声明
test.c
放置函数的实现
8. 结束
那么今天的学习就到这里咯,今天我们学习了函数的有关知识
小杜跟各位小伙伴在一起成长,祝我们都能成为大牛!
//小杜的成长之路