当前位置: 首页 > news >正文

五、函数的介绍

1、为什么需要函数

(1)当程序足够简单时,一个main函数就可以实现所有功能。随着程序功能的增加、复杂化,超出人的大脑的承受范围,这时一个main函数可能就逻辑不清了。这是就需要把一个大程序分成许多小的模块来组织,于是乎出现了概念叫做函数。

(2)函数就是一组一起执行一个任务或功能的语句。举例:就相当于一篇文章要分段一样,一个程序可以分成不同的函数,每个函数执行一个特定的功能。

(3)每个C程序都至少有一个函数,即主函数 main() 。主函数是一种特别的函数,特别之处在于,一个C语言程序必须有一个main函数。C语言规定,一个C语言程序从主函数开始执行,到主函数执行完结束。

(4)C 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置。

2、函数的定义

(1)C 语言中的函数定义的一般形式如下:

return_type function_name( parameter list )
{body of the function  // 函数体
}

(2)在 C 语言中,函数由一个函数头和一个函数主体组成。函数的所有组成部分:

  • 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void
  • 函数名称:函数的实际名称。
  • 参数:当函数被调用时,所需要的原始数据就是参数。参数包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数,也可能包含多个参数。
  • 函数体:函数体包含一组定义函数执行功能的语句。

(3)函数定义决定了的函数的功能,提供了函数的实际主体。

3、函数的声明

(1)函数声明实际上是叫函数原型声明。什么叫原型?函数的原型包含三部分:函数名,返回值类型,函数参数列表。通俗讲,函数原型就是这个函数叫什么,接收什么类型的几个参数,返回一个什么样的返回值。

(2)函数声明的目的是告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。

4、函数的调用

(1)创建 C 函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。

(2)函数调用就是使用函数名来调用函数完成功能。调用时必须参照原型给函数传参,然后从函数得到适当的返回值作为结果。

5、库函数

(1)库函数就是别人写好的,可以直接调用的函数。例如C语言的标准库。

(2)在C语言中写代码时可以引用库函数,但是必须使用#include引用这个库函数所在的头文件。

6、函数参数

6.1、形参和实参

(1)形参

  • 全称为形式参数。在函数定义和函数声明中的参数,都是形参。
  • 形参不是实际存在的变量

(2)实参

  • 全称为实际参数,函数调用中,实际传递给函数的变量就是实参。
  • 实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。

(3)函数调用的过程,其实就是实参传递给形参的一个过程。这个传递实际是一次拷贝。实参本身并没有进入到函数内,而是把自己的值复制了一份传给了函数中的形参,在函数中参与运算。

6.2、传值调用&引用调用

调用类型描述
传值调用该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。
引用调用通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。

http://www.lryc.cn/news/234285.html

相关文章:

  • 【广州华锐互动VRAR】VR元宇宙技术在气象卫星知识科普中的应用
  • F. Alex‘s whims Codeforces Round 909 (Div. 3) 1899F
  • 面试题-5
  • 车载以太网-ARP
  • Kafka学习笔记(三)
  • JVM-HotSpot虚拟机对象探秘
  • 大模型技术的发展:开源和闭源,究竟谁强谁弱又该何去何从?
  • Python学习笔记--自定义元类
  • 软件测试 —— 常见的自动化测试架构!
  • Python 的 @lru_cache() 装饰器
  • Swift制作打包framework
  • 无线WiFi安全渗透与攻防(N.2)WPA渗透-使用airolib-ng创建彩虹表加速
  • 整形数据和浮点型数据在内存中的存储差别
  • 【Python基础篇】运算符
  • 开启数据库审计 db,extended级别或os级别)并将审计文件存放到/opt/oracle/audit/下
  • 02.webpack中多文件打包
  • IEEE Standard for SystemVerilog Chapter 22. Compiler directives
  • 机器学习中的独立和同分布 (IID):假设和影响
  • PTP软硬件时间戳
  • 使用ADS进行serdes仿真时,Tx_Diff中EQ的设置对发送端波形的影响。
  • 数据库迁移(DBeaver版本)
  • 【c++STL常见排序算法sort,merge,random_shuffle,reverse】
  • STM32/N32G455国民科技芯片驱动DS1302时钟---笔记
  • 基于PLC的污水厌氧处理控制系统(论文+源码)
  • Unity之NetCode多人网络游戏联机对战教程(9)--NetworkAnimator组件
  • iceoryx之Roudi
  • .Net(C#)常用转换byte转uint32、byte转float等
  • windows快捷方式图标变成空白
  • 【Linux系统编程十九】:(进程通信)--匿名管道/模拟实现进程池
  • 【全网首发】2023年NOIP真题