《《函数C语言》课件.pptx》由会员分享,可在线阅读,更多相关《《函数C语言》课件.pptx(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、函数c语言ppt课件REPORTING2023 WORK SUMMARY目 录CATALOGUEC语言函数概述C语言标准库函数自定义C语言函数函数重载与覆盖函数递归函数内存管理PART 01C语言函数概述定义函数的过程,包括函数名、参数列表和函数体。函数定义在程序中提前声明函数,告诉编译器函数的名称、返回类型和参数类型等信息。函数声明函数定义与声明在调用函数时必须提供的参数,用于传递数据给函数。在调用函数时可以选择提供的参数,用于提供额外的数据给函数。函数参数可选参数必需参数指定函数返回值的类型,可以是任意数据类型,如int、float、char等。返回值类型将函数执行的结果返回给调用者,或者
2、将函数的执行状态告知调用者。返回值的作用函数返回值PART 02C语言标准库函数用于进行数学运算,如三角函数、指数函数、对数函数等。数学函数示例描述计算平方根、余弦值、自然对数等。这些函数在数学计算中非常有用,可以简化复杂的数学运算过程。030201数学函数用于对字符串进行操作,如字符串连接、字符串比较、字符串转换等。字符串处理函数将字符串转换为大写、查找子字符串、连接两个字符串等。示例字符串处理在程序设计中非常重要,这些函数提供了方便快捷的字符串操作方式。描述字符串处理函数 输入输出函数输入输出函数用于从输入设备读取数据或向输出设备写入数据。示例读取键盘输入、写入文件、格式化输出等。描述输入
3、输出函数是程序与外部世界交互的桥梁,对于数据的输入和输出操作至关重要。PART 03自定义C语言函数首先需要定义函数的名称、返回类型和参数列表。函数定义在函数体中编写实现函数功能的代码。函数体根据函数定义,在函数体中返回相应的值。返回值函数实现参数传递将实际参数传递给函数中的形参,以便在函数内部使用。函数调用语法使用函数名和括号,并在括号内提供参数(如果有的话)。返回值处理根据函数定义,处理函数的返回值。函数调用通过值传递参数,函数接收参数的副本,对副本的修改不会影响原始数据。值传递通过引用传递参数,函数接收参数的引用,对引用的修改将影响原始数据。引用传递通过指针传递参数,函数接收参数的指针,
4、对指针指向的数据的修改将影响原始数据。指针传递函数参数传递PART 04函数重载与覆盖函数重载是指在同一作用域内,可以定义多个同名函数,只要它们的参数列表不同即可。函数重载可以提高代码的可读性和可维护性,因为可以使用相同的函数名来执行不同的操作。在C语言中,函数重载是通过编译器的类型检查来实现的,编译器会根据函数的参数类型和数量来区分不同的函数。函数重载 函数覆盖函数覆盖是指在派生类中重新定义基类中的虚函数。函数覆盖可以实现运行时的多态性,即根据实际对象的类型来调用相应的函数。在C中,函数覆盖是通过虚函数表来实现的,编译器会为每个含有虚函数的类生成一个虚函数表,表中包含了该类中所有虚函数的地址
5、。PART 05函数递归递归函数是指在其定义中调用自身的函数。递归函数必须有一个明确的结束条件,当满足该条件时,递归将停止。递归函数定义递归函数具有简洁的代码实现和易于理解的特点,能够解决一些复杂的问题。递归函数在处理重复或分层的问题时非常有用。递归函数的特点根据递归调用的方式,递归函数可以分为直接递归和间接递归。直接递归是指函数在其定义中直接调用自身,而间接递归则是通过其他函数间接地调用自身。递归函数的分类递归函数定义递归函数的实现原理递归函数的实现基于栈原理。每次函数调用都会在栈中保存相关信息,包括函数的参数、局部变量等。当函数返回时,这些信息将从栈中弹出并恢复到调用前的状态。递归函数的参
6、数传递在递归函数中,参数传递是通过栈进行的。每个递归调用都会在栈中保存其参数值,以便在返回时使用。这使得递归函数能够处理嵌套的数据结构,如二叉树、图等。递归函数的性能优化虽然递归函数具有简洁的代码实现和易于理解的特点,但在处理大规模数据时可能会导致栈溢出或性能下降。因此,在实际应用中需要对递归函数进行性能优化,如使用迭代替代递归、减少递归深度等。递归函数实现递归函数调用的执行流程当程序执行到递归函数的调用时,会将当前的上下文信息保存到栈中,然后跳转到该函数的定义处执行。当满足结束条件时,递归调用返回,并将之前保存的上下文信息从栈中弹出,恢复到调用前的状态。递归调用的应用场景递归调用的应用场景非
7、常广泛,如二叉树的遍历、图的搜索、排序算法等。在这些场景中,递归函数能够将问题分解为更小的子问题,从而简化问题的解决过程。避免无限递归在编写递归函数时,必须注意设置明确的结束条件,以避免无限递归导致程序崩溃。如果未设置正确的结束条件或逻辑错误导致无限递归,程序将无法正常执行并最终崩溃。递归函数调用PART 06函数内存管理栈内存的特点先进后出(FILO)原则快速分配和释放栈内存管理由操作系统自动管理栈内存的用途存储局部变量栈内存管理存储函数调用的返回地址栈溢出问题当局部变量过多或递归深度过深时,可能导致栈溢解决方法:限制递归深度、减少局部变量数量、使用栈空间更大的数据类型01020304栈内存管理堆内存的特点动态分配和释放需要程序员手动管理堆内存管理03存储全局变量和静态变量01可能产生内存碎片02堆内存的用途堆内存管理123动态分配的内存空间堆内存管理问题内存泄漏:未及时释放已分配的内存空间堆内存管理野指针指向已释放的内存空间或无效的内存空间解决方法使用智能指针、手动跟踪内存分配和释放、使用内存检测工具堆内存管理THANKS感谢观看2023 WORK SUMMARYREPORTING