C语言第五学:函数

     

1. 函数的概念

2. 库函数

2.1 标准库和头文件

C语⾔标准中规定了C语⾔的各种语法规则,C语⾔并不提供库函数;C语⾔的国际标准ANSIC规定了⼀ 些常⽤的函数的标准,被称为标准库,那不同的编译器⼚商根据ANSI提供的C语⾔标准就给出了⼀系列函数的实现。这些函数就被称为库函数

我们前⾯内容中学到的 printf 、 scanf 都是函数,库函数也是函数,不过这些函数已经是现成 的,我们只要学会就能直接使⽤了。有了库函数,⼀些常⻅的功能就不需要程序员⾃⼰实现了,⼀定程度提升了效率;同时库函数的质量和执⾏效率上都更有保证。

各种编译器的标准库中提供了⼀系列的库函数,这些库函数根据功能的划分,都在不同的头⽂件中进 ⾏了声明。       【库函数相关头⽂件:https://zh.cppreference.com/w/c/header

2.2 库函数的使用方法

库函数的学习和查看⼯具很多,⽐如:

C/C++官⽅的链接:https://zh.cppreference.com/w/c/header

cplusplus.com:https://legacy.cplusplus.com/reference/clibrary/
【库函数文档的⼀般格式   1. 函数原型   2. 函数功能介绍   3. 参数和返回类型说明   4. 代码举例  5. 代码输出   6. 相关知识链接】

功能 :Compute square root 计算平⽅根       Returns the square root of x.(返回平⽅根)

头⽂件包含:库函数是在标准库中对应的头⽂件中声明的,所以库函数的使⽤,务必包含对应的头⽂件,不包含是可能会出现⼀些问题的。

3. 自定义函数

了解了库函数,我们的关注度应该聚焦在⾃定义函数上,⾃定义函数其实更加重要,也能给程序员写代码更多的创造性。

3.1 函数的语法形式

ret_type 是函数返回类型    fun_name 是函数    括号中放的是形式参数     {}括起来的是函数体

3.2 函数的举例

例⼦: 写⼀个加法函数,完成2个整型变量的加法操作。

Add函数也可以简化为:

函数的参数部分需要交代清楚,未来我们是根据实际需要来设计函数的,函数名、参数、返回类型都是可以灵活变化的。

4. 形参和实参

4.1 实参

在上⾯举例的代码中,是先有Add 函数的定义,有了函数后,再调⽤Add函数的。

调⽤Add函数时,传递给函数的参数a和b就称为实际参数,简称实参

实际参数就是真实传递给函数的参数。

4.2 形参

在上⾯举例的代码中,函数名 Add 后的括号中写的 x 和 y ,称为形式参数,简 称形参

4.3 实参和形参的关系

虽然参是传递参的,他们之间有一些联系,但是形参和实参各⾃是独⽴的内存空间。        

我们在调试的时候可以观察到,x和y确实得到了a和b的值,但是x和y的地址和a和b的地址是不⼀样的,所以我们可以理解为形参是实参的⼀份临时拷贝

5. return语句

6. 数组做函数参数

在使⽤函数解决问题的时候,难免会将数组作为参数传递给函数,在函数内部对数组进⾏操作。

⽐如:写⼀个函数将⼀个整型数组的内容,全部置为-1,再写⼀个函数打印数组的内容。

7. 嵌套调用和链式访问

7.1 嵌套调用

嵌套调⽤就是函数之间的互相调⽤,每个函数就像⼀个乐⾼零件,正是因为多个乐⾼的零件互相⽆缝 的配合才能搭建出精美的乐⾼玩具,也正是因为函数之间有效的互相调⽤,最后写出来了相对⼤型的程序。

7.2 链式访问

所谓链式访问就是将⼀个函数的返回值作为另外⼀个函数的参数,像链条⼀样将函数串起来就是函数的链式访问。

前⾯的代码完成动作写了2条语句,如果把strlen的返回值直接作为printf函数的参数,这样就是⼀ 个链式访问的例了。

8. 函数的声明和定义

8.1 单个⽂件

⼀般我们在使⽤函数的时候,直接将函数写出来就使⽤了。

⽐如:我们要写⼀个函数判断⼀年是否是闰年。

那如果我们将函数的定义放在函数的调⽤后边,在VS2022上编译,会出现下⾯的警告信息:

函数的调⽤⼀定要满⾜,先声明后使⽤; 函数的定义也是⼀种特殊的声明,所以如果函数定义放在调⽤之前也是可以的。

8.2 多个⽂件

⼀般在企业中我们写代码时候,代码可能⽐较多,不会将所有的代码都放在⼀个⽂件中;我们往往会 根据程序的功能,将代码拆分放在多个⽂件中。

⼀般情况,函数的声明、类型的声明放在头⽂件(.h),函数的实现是放在源⽂件(.c)⽂件中。 

8.3 static和extern

static 和extern 都是C语⾔中的关键字

static 是静态的意思,可以⽤来: • 修饰局部变量  • 修饰全局变量 • 修饰函数

extern 是⽤来声明外部符号的。

在讲解 static 和 extern 之前再⼀下:作⽤域和⽣命周期。

8.3.1 static修饰局部变量:

结论:

static修饰局部变量改变了变量的⽣命周期,⽣命周期改变的本质是改变了变量的存储类型,本来⼀个局部变量是存储在内存栈区的,但是被 static 修饰后存储到了静态区。

存储在静态区的变量和全局变量是⼀样的,⽣命周期就和程序的⽣命周期⼀样了,只有程序结束,变量才销毁,内存才回收。但是作⽤域不变的。

8.3.2 static修饰全局变量

8.3.3 static修饰函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值