学习C的知识点六--函数

1 函数的使用目的

当我将某一个功能封装成一个函数的时候,那么我修改该功能的时候,只需要修改该函数。
如果程序中,该功能出现若干次,那么我只要修改一次函数,所有功能实现处都会改变。
即,函数提高了我的代码的重构效率,指提高了工作效率。提高了代码的重用性
注: 函数中功能的覆盖性可以广泛。但是函数的功能越单一越好。
举例说明: 一个函数,如果是用来验证是否为质数,那么只验证是否为质数,不输出。

2 函数的定义

将某一个特定的功能,打包封装后,称为函数。那么在该函数外部,如果需要实现这个特定功能,只需要调用封装好的函数即可。

3 函数的三要素

3.1 函数名

一个函数的名字,注意,在C语言中,函数名绝对不能重复。

3.2 函数返回值类型:

什么叫函数的返回值:如同所有的表达式都会得到一个运算结果。那么对于函数,当发生调用函数时,调用函数的语句就是一个表达式,这个表达式得到的运算结果,仅仅取决于函数的返回值(如果我们想将一个特定的值给到函数表达式本身。那么只要在return后面写上该特定值,当函数调用完成后,函数表达式本身的值就是该特定值)。

3.3 函数的参数列表:

一个函数在运算过程中,如果需要使用外部的变量,则可能通过参数列表的形式,来得到这个外部变量的值。
注意:

  • 函数定义的时候,参数列表称为形参。
  • 函数调用的时候,参数列表称为实参。
  • 发生函数调用的时候,会将实参的值赋值给形参。
  • 函数调用完成时,形参并不会赋值给实参。而是会将返回值赋值给函数表达式本身
  • 可变参数函数:参数的数量根据实际需求,动态改变。
    但是注意:无论怎么改变,必须有一个固定参数(第一个参数)。

可变参数的函数使用:
在这里插入图片描述
关闭回显system(“sty -echo”);//函数会将输入的字符在终端上执行。
打开回显system(“stty echo”);
使用system函数时 需要使用#include<stdlib.h>

4 递归函数

函数自己调用自己
递归函数的3要素:

  • 自己调用自己
  • 要有明确的退出点,否则就会造成栈溢出
  • 每一次递归,必须逐渐趋近于递归退出点。

递归的思想: 在某些复杂的问题中,我们并不知道这个问题的解是多少。此时可以将该问题分解成逻辑相似的简单问题去解决。如果这个简单的问题依旧无法解决,继续分解。当分散到最低层的时候,我们需要给最低层问题一个确切的解。此时由于最低层已经解决,那么依赖于低层问题的上一层问题也能解决,依次逐层向上解决,直到解决最高层问题为止。

注意: 在递归函数中,严禁使用static.如果递归函数中使用static变量来完成逻辑计算,那么当你第一次递归函数的时候,能够算出正确的结果。但是当第二次调用这个递归函数的时候,结果肯定是错误的。

递归和循环的区别:
循环在时间复杂度上会很高,但是其空间复杂度一定会很低。
递归在空间复杂度上会很高,但是其在时间复杂度上不一定会低。当设计合理时,递归的时间复杂度会非常非常的低。

对一个地址(一个十六进制的数)前面加上‘*’,代表着系统会跑到该地址上,将该地址值上的值取出来使用。
例如: 0x01 上保存的值为 2
此时,我有一个地址变量 p=0x01
那么,此时,*p=2

程序的分文件:

第一步,编写相关头文件(.h)
示例代码:

#ifndef _head_h
#define _head_h
#include<stdio.h>
int add(int a,int b);   //函数原型
#endif 

第二步,在主文件中包含相关自定义的头文件(main所在函数中)

#include”head.h”

第三步,编写函数实现文件(.c)

#include”head.h”
int add(int a,int b){ retrun a+b;}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值