还剩27页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
程序设计函数CC语言函数是构建程序的关键组件它们封装代码,实现特定任务,使程序结构清晰、代码复用、调试方便函数概述代码模块化逻辑封装函数是代码模块化的一种重要手段将代码组织成函数可函数将代码逻辑封装到一个独立的单元中,可以隐藏实现以提高代码的可读性、可维护性和可重用性代码组织成细节,只暴露必要的接口,提高代码的安全性函数可以独立的函数可以使代码更容易理解、修改和调试被多次调用,避免重复代码,提高代码的效率函数的基本形式函数名函数名是函数的标识符,用于调用函数函数名必须遵循标识符的命名规则参数列表参数列表包含函数接受的输入参数,参数之间用逗号分隔参数的类型和顺序必须与函数定义中一致返回值类型返回值类型指定函数返回的值的类型函数可以使用return语句返回一个值,返回值的类型必须与返回值类型一致函数体函数体包含函数执行的代码代码块使用大括号{}包围,包含变量声明、表达式和语句函数的声明和定义函数声明函数定义12函数声明告诉编译器函数函数定义包含函数的代码的名称、返回值类型和参,它描述了函数如何工作数列表函数原型作用34函数原型是一个函数声明函数声明和定义可以使代,它指定函数的返回值类码更清晰、可读性更高,型、名称和参数列表并有助于防止错误函数的参数传递值传递引用传递实参的值复制到形参中,形参的形参是实参的别名,对形参的操改变不影响实参作直接影响实参形参和实参形参实参形参是函数定义中使用的参实参是函数调用时传递给函数数的参数它们是函数内部使用的变量它们是函数外部的变量,在,只在函数内部有效函数调用时被复制到形参区别形参是函数内部的变量,实参是函数外部的变量形参的值是在函数调用时由实参传递的值传递和引用传递值传递引用传递在函数调用中,将实参的值复制给形参,形参的改变不会在函数调用中,将实参的地址传递给形参,形参的改变会影响实参影响实参变量的作用域变量作用域概述局部变量作用域决定了变量在程序中局部变量定义在函数内部,的可见性和有效性变量的仅在函数内部可见,函数调有效范围是程序代码中可以用结束后被释放访问和修改变量的区域全局变量作用域规则全局变量定义在函数外部,作用域规则决定了程序中不可在整个程序中访问,程序同作用域的变量之间的访问结束时被释放权限,避免变量名冲突局部变量和全局变量局部变量全局变量仅在声明它的函数内部可见在所有函数之外声明,作用域为整个程序函数调用结束后,局部变量将被销毁全局变量在程序运行期间一直存在不同函数中可以使用相同名称的局部变量所有函数都可以访问和修改全局变量静态变量内存分配生命周期作用域静态变量在程序执行之前就已经分配静态变量的生命周期与程序运行的生静态变量的作用域仅限于声明它的函了内存空间,并在程序结束时才会释命周期相同,直到程序结束才释放内数内部放存空间递归函数递归函数是指在函数体内调用自身的函数递归函数的执行过程类似于俄罗斯套娃,不断调用自身,直到满足终止条件基例1停止递归的条件递归步骤2调用自身,解决子问题函数调用3调用递归函数递归函数的优缺点代码简洁结构清晰
1.
2.12递归函数可以将复杂的逻递归函数的代码结构清晰辑问题简化为更小的子问,易于理解和维护题,使代码更加简洁易懂可能会造成栈溢出效率可能较低
3.
4.34递归调用会占用系统栈空递归调用会增加函数调用间,如果递归层数过深,开销,在某些情况下效率可能会导致栈溢出可能比循环低函数的返回值函数的返回值返回值类型返回值的使用函数执行完成后,可以返回一个值到返回值的类型需要在函数定义时声明调用函数时,可以使用变量接收函数调用函数的地方,并与函数实际返回的值类型一致的返回值,并进行后续操作返回值的类型返回值类型类型匹配函数的返回值类型决定了函数返回结函数的返回值类型必须与函数声明中果的数据类型例如,如果函数返回指定的返回值类型一致如果类型不一个整数,则返回值类型应为int匹配,编译器会报错类型类型转换void当函数不需要返回任何值时,返回值如果需要将不同类型的返回值转换为类型应为void例如,一个用于打印另一种类型,可以使用类型转换操作信息的函数可以设置为void类型符例如,将一个浮点数转换为整数可以使用intfloat返回多个值的方法结构体指针12定义一个结构体,将需要通过指针将多个值的地址返回的多个值封装到结构传递给函数,并在函数内体中,然后将结构体作为部修改这些值函数的返回值全局变量3将需要返回的多个值定义为全局变量,并在函数内部修改这些全局变量的值指针与函数指针作为参数传递指针作为返回值指针作为参数传递,可以提高函数的效率和灵活性函数可以通过指针返回一个指向动态分配内存的地址函数可以通过指针修改实参的值,实现对实参的直接操作指针作为返回值,可以返回多个值或返回指向大型数据的指针指针作为参数传递地址传递修改原值提高效率函数调用时,指针参数传递的是变量函数可以通过指针修改调用函数中变指针传递可以减少数据复制,提高函的内存地址量的值,因为它可以直接访问变量的数调用的效率,特别是在传递大型结内存位置构体时指针作为返回值返回地址指针指向数据传递函数返回指针,可以将函数内部的内通过返回指针,可以访问函数内部创指针作为返回值,可以在函数之间高存地址传递到外部建的动态内存效地传递数据函数指针概念使用数组函数指针是指向函数的指针,它存储函数指针可以通过指针的方式调用函函数指针可以组成数组,用于存储多函数在内存中的地址数,实现灵活的函数调用机制个函数的地址,便于管理和调用回调函数函数指针作为参数事件驱动的编程
1.
2.12回调函数通过函数指针传在事件驱动的编程模型中递给其他函数,以便在特,回调函数在事件触发时定事件发生时被调用被执行,例如按钮点击或网络请求完成灵活性和可扩展性异步操作
3.
4.34回调函数允许程序员根据回调函数常用于处理异步需要定制行为,而无需修操作,例如网络请求或文改调用函数的代码件读取,在操作完成后执行回调函数动态内存分配程序运行时分配内存避免浪费内存空间满足程序的动态需求和函数malloc free内存分配释放内存malloc函数用于在堆中动态分配内存free函数用于释放由malloc函数分它接受一个参数,指定要分配的字配的内存它接受一个参数,即指向节数如果分配成功,它将返回指向要释放内存块的指针分配内存的指针;否则返回NULL内存泄漏如果程序中使用malloc分配的内存没有被free释放,就会导致内存泄漏这会导致程序性能下降甚至崩溃和函数calloc realloc函数函数calloc realloc分配内存并初始化为0调整已分配内存的大小例如,创建一个大小为100的整数数组例如,将现有数组的大小增加到200动态内存的使用技巧合理分配及时释放根据实际需要分配内存,避免过度分配或不足分配,防止内存使用完动态内存后,及时释放不再需要的内存,防止内存泄漏浪费或溢出错误处理安全使用在分配或释放内存时,要进行错误处理,防止程序崩溃确保对分配的内存进行合法访问,避免越界访问或访问已释放的内存内存泄漏及其检测内存泄漏概述检测方法内存泄漏是指程序动态分配的内存空间,在使用完毕后未可以使用内存泄漏检测工具,例如Valgrind、Purify等,通及时释放,造成内存资源浪费,最终导致程序崩溃过分析程序运行时的内存使用情况,找出潜在的内存泄漏问题常见的内存泄漏类型包括堆内存泄漏、栈内存泄漏和全局变量内存泄漏一些开发环境也提供内存泄漏检测功能,可以帮助开发者快速定位内存泄漏问题函数的编程技巧模块化设计代码复用错误处理调试技巧将复杂任务分解成较小的函编写可复用的函数,减少重编写健壮的函数,处理异常使用调试工具,设置断点,数,提高代码可读性和可维复代码,提高效率情况,提高程序稳定性查看变量值,定位问题护性函数的调试方法调试器打印语句
1.
2.12调试器是常用的调试工具在代码中插入打印语句,,它可以帮助您逐步执行输出关键变量的值和运行代码,检查变量的值和执状态,有助于定位错误行流程逻辑分析单元测试
3.
4.34仔细检查代码逻辑,分析编写单元测试用例,测试函数的输入、输出和预期函数的各个功能,可以快结果,排查逻辑错误速定位问题函数的优化方法减少代码执行时间降低内存使用通过使用更有效率的算法、减少减少不必要的变量、优化数据结循环次数、优化数据结构等方法构、使用内存池等方法来降低程来提升代码执行效率序对内存的占用量提高代码质量使用编译器优化编写简洁、易读、可维护的代码利用编译器提供的优化选项,例,并使用代码分析工具来帮助识如开启代码优化、内存优化等,别潜在的优化点来提升程序的性能课程总结与展望本课程系统讲解了C语言函数的相关知识,包括函数的定义、调用、参数传递、返回值、作用域等函数是结构化程序设计的重要组成部分,掌握函数的使用可以提高代码的可读性、可维护性以及可重用性。
个人认证
优秀文档
获得点赞 0