【C语言】函数详解

函数

  • 函数的概念:C语言中的函数就是为了完成某项待定任务的一小段代码
  • 库函数
  1. 标准库和头文件:https://zh.cppreference.com/w/c/header、
  2. 库函数的使用方法:

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

cplusplus.com:https://legacy.cplusplus.com/reference/clibrary/

  • 库函数文档的一般形式
  1. 自定义函数和函数的语法形式

Void函数表示什么都不返回

2.函数举例:计算一个加法函数

首先要算两个数的加法,这里的加法算式是直接调用Add函数

  • 形参和实参(以及形参和实参的关系)
  • 我觉得形参像是快递站,实参像是快递。快递放在哪个站点并不会影响你收到快递的变化

    return 语句

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

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

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

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

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

    例子:

    利用函数求和

  • 再用函数来求奇数还是偶数。是奇数返回1,是偶数返回0

  • 数组做函数参数

    写一个数组将arr数组的内容全部设置为-1

  • 定义数组,算出数组的长度,定义一个set_arr函数将数组内容设置为-1

    得出数组传参的几个重要知识点

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

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

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

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

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

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

    得出以下三个函数实现内容

    七.嵌套的调用和链式访问

    (1)嵌套调用

    运用计算该年是否是闰年(条件:可以同时被4和100整除或者可以被400整除),判断完成后。判断该月的天数

    先用一个判断正负的布尔函数来实现判断

    再定义来判断该年准确的天数

    再用主函数实现整体函数

  • 链式访问:将函数的返回值当作另一个函数的参数,像链条一样串起来
  • 例子1:

  • 例子2

    解释代码:

    printf函数返回的是打印在屏幕上的字符的个数

    上⾯的例⼦中,我们就第⼀个printf打印的是第⼆个printf的返回值,第⼆个printf打印的是第三printf的返回值

    第三个printf打印43,在屏幕上打印2个字符,再返回2

    第⼆个printf打印2,在屏幕上打印1个字符,再放回1

    第⼀个printf打印1

    所以屏幕上最终打印:4321

    八.函数的声明和调用

    1.单个声明

    (1)比如:我们写一段判断是否是闰年的代码

    橙色的是定义,绿色的是调用

    如果将代码的定义和调用更换位置,那么代码就无法正常运行。所以代码必须先声明后使用

    所以我们可以更改为这个:函数的定义是一种特殊的声明

    2.多个文件

    企业中写文件的时候代码比较多,就会把代码放在多个文件之中,实现这种效果

  • static和extern
  • {1}两者都是C语言中的关键字

    Static的作用:修饰局部变量,全局变量,函数

    Extern的作用:声明外部符号

    {2}作用域和生命周期:

    作用域:限定代码名字的可用范围叫做这串代码的作用阈

    [1]局部变量的作用域是修饰整个局部范围

    [2]全局变量的作用域是整个工程

    生命周期:变量申请创立到变量销毁的范围

    [1]局部变量的是从进入这个程序的某个过程开始直到这个过程结束

    [2]全局变量的生命周期是整个工程的生命周期

  • (1)static修饰的局部变量

  • 代码解读1:test函数中的局部变量i每次进入函数时先创建变量(生命周期开始)然后赋值为0,再打印,++,出函数的时候变量⽣命周期将要结束(释放内存)。[代码结果为 1 1 1 1 1]

    代码解读2:被static修饰的局部变量i,每次进入函数时候就不会自动销毁,而是延续先前的结果进行++,所以得出的结果是1 2 3 4 5

    结论:

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

    也就是说加了static之后变量的生命周期改变,变量的储存类型改变,效果和全局变量一致,到程序结束才销毁

    (2)static修饰的全局变量

  • 结论:⼀个全局变量被static修饰,使得这个全局变量只能本源⽂件内使⽤,不能在其他源⽂件内使⽤。本质原因全局变量默认是具有外部链接属性的,在外部的⽂件中想使⽤,只要适当的声明就可以使⽤;

    但是全局变量被 static 修饰之后,外部链接属性就变成了内部链接属性只能在⾃⼰所在的源⽂件内部使⽤了,其他源⽂件,即使声明了,也是⽆法正常使⽤的

  • static修饰函数(和static修饰全局变量的效果完全一致)
  • 41
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值