函数的讲解

1. 函数的概念

2. 库函数

3. ⾃定义函数

4. 形参和实参

5. return语句

6. 数组做函数参数

7. 嵌套调⽤和链式访问

8. 函数的声明和定义

1. 函数的概念

C语⾔中的函数就是⼀个完成某项特定的任务的⼀⼩段代码,这段代码是有特殊的写法和调⽤⽅法的。 C语⾔的程序其实是由⽆数个⼩的函数组合⽽成的。

2. 库函数

2.1标准库和头⽂件

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

库函数相关头⽂件:https://zh.cppreference.com/w/c/header

2.2库函数使用方法

2.2.1功能

Computesquareroot计算平⽅根

Returns the square root of x.(返回平⽅根)

2.2.2 头⽂件包含

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

3.自定义函数

3.1函数语法形式

int是返回类型

fun_name是函数名

(  )中放的是形式参数

{  }括起来的是函数体

举例:

4. 形参和实参

4.1 实参

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

例如上方 174-179行是 Add 函数的定义,有了函数后,再第188⾏调⽤Add函数的。 我们把第188⾏调⽤Add函数时,传递给函数的参数a和b,称为实际参数,简称实参。

4.2 形参

在上⾯代码中,第174⾏定义函数的时候,在函数名 Add 后的括号中写的 x 和 y ,称为形式参数,简称形参

4.3 实参和形参的关系

0

x和y确实得到了a和b的值,但是x和y的地址和a和b的地址是不⼀样的,所 以我们可以理解为

形参是实参的⼀份临时拷⻉

5.return 语句

1.return后边可以是⼀个数值,也可以是⼀个表达式,如果是表达式则先执⾏表达式,再返回表达式 的结果。

2.return后边也可以什么都没有,直接写 return; 这种写法适合函数返回类型是void的情况。

3.return返回的值和函数返回类型不⼀致,系统会⾃动将返回的值隐式转换为函数的返回类型。

4.return语句执⾏后,函数就彻底返回,后边的代码不再执⾏。

5.如果函数中存在if等分⽀的语句,则要保证每种情况下都有return返回,否则会出现编译错误

6. 数组做函数参数

举例 将一个数组里的数全部变成-1

知识点:

1.函数的形式参数要和函数的实参个数匹配 

2.函数的实参是数组,形参也是可以写成数组形式的 

3.形参如果是⼀维数组,数组⼤⼩可以省略不写 

4.形参如果是⼆维数组,⾏可以省略,但是列不能省略 

5.数组传参,形参是不会创建新的数组的 

6.形参操作的数组和实参的数组是同⼀个数组

7.嵌套调⽤和链式访问

7.1 嵌套调⽤

计算某年某⽉有多少天

main 函数调⽤ scanf , printf ,get_days_of_month

get_days_of_month函数调⽤ is_leap_year

7.2 链式访问

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

举例:

改写成

就是链式访问

8. 函数的声明和定义

8.1单个文件

上⾯代码中橙⾊的部分是函数的定义绿⾊的部分是函数的调⽤

如果把函数的定义放下面 编辑器会报错。

函数的调⽤⼀定要注意,先声明后使⽤

函数的定义也是⼀种特殊的声明,所以如果函数定义放在调⽤之前也是可以的

8.2 多个⽂件

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

8.3 static和extern

static 是 静态的的意思,可以⽤来:

1.修饰局部变量

2.修饰全局变量

3.修饰函数

extern 是⽤来声明外部符号的

作⽤域(scope)是程序设计概念,通常来说,⼀段程序代码中所⽤到的名字并不总是有效(可⽤) 的,⽽限定这个名字的可⽤性的代码范围就是这个名字的作⽤域。

1. 局部变量的作⽤域是变量所在的局部范围。

2. 全局变量的作⽤域是整个⼯程(项⽬)

⽣命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的⼀个时间段。

1. 局部变量的⽣命周期是:进⼊作⽤域变量创建,⽣命周期开始,出作⽤域⽣命周期结束。

2. 全局变量的⽣命周期是:整个程序的⽣命周期。

8.3.1 static 修饰局部变量:

举例

对比结果发现

static修饰局部变量改变了变量的⽣命周期,⽣命周期改变的本质是改变了变量的存储类型,本 来⼀个局部变量是存储在内存的栈区的,但是被 static 修饰后存储到了静态区。存储在静态区的变量和全局变量是⼀样的,⽣命周期就和程序的⽣命周期⼀样了,只有程序结束,变量才销毁,内存才 回收。但是作⽤域不变的

8.3.2 static修饰全局变量

⼀个全局变量被static修饰,使得这个全局变量只能在本源⽂件内使⽤,不能在其他源⽂件内使⽤

8.3.3static 修饰函数

static 修饰函数和 static 修饰全局变量是⼀模⼀样的,⼀个函数在整个⼯程都可以使⽤.

  • 24
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值