4章 函数.pptVIP

  • 3
  • 0
  • 约1.31万字
  • 约 69页
  • 2017-05-28 发布于上海
  • 举报
4章 函数

第4章 函数和编译预处理 4.1 函数 程序员通常把一些反复调用的代码,或将功能比较独立的代码分装成一个独立的函数。使用函数可以减少代码量,提高程序的空间效率;方便模块的调试,便于对模块的代码进行维护;增强程序可阅读性。用户在程序中根据自己需要定义的函数称为自定义函数。 一个复杂的C++程序是由一个主函数和若干个函数组成的。主函数的函数名为main。主函数是整个程序执行时的入口。 本章需要掌握的内容 有参函数和无参函数的定义 返回与返回值 函数的形参和实参以及参数的传递方式 函数的原型声明 函数的递归调用 变量的存储类别和作用域 函数的重载、内联、缺省变元 预编译处理指令 4.2 函数的定义 其他函数需要用户自己定义,故又称之为自定义函数。每个函数完成一些操作,以实现某个预期的功能。对于函数,需要先定义、后使用(被调用)。每个函数必须有一个函数名,函数名必须是一个合法的C++标识符 函数参数是调用者向被调函数传递的,被调函数运行时所需要的数据。C++中有的函数需要参数,当然也有的函数不需要参数。 无参函数和有参函数 4.2.3 返回值定义 在C++中,可以通过被调用函数返回值的方法来将函数运行结果返回给调用函数。 这个返回值有一个确定的类型,在函数定义时必须将返回值的类型写在函数名的前面。 返回值类型可以是基本数据类型和各种构造数据类型,如指针、结构、类等 一个被调用函数只能返回一个值给调用函数作为结果。 被调用函数也可能不需要向调用者传递运算结果,没有返回值的函数必须说明为void。 2 return 语句 4.3.1 形参与实参 在函数定义参数表中说明的参数称为形式参数,简称形参。 在函数调用时,函数名后的括号中依次列举的称为实际参数,简称实参。 实参的类型和个数必须与形参存在一一对应的关系。 当类型不一致时,将进行自动类型转换 4.3.2 函数声明 与变量定义一样,C++中要求函数定义在前,调用在后 。 当函数“调用在前,定义在后”时,必须在调用此函数之前对被调用的函数作声明。 函数的原型声明格式如下: 类型 函数名(参数表); 函数原型声明包括函数名、返回值的类型、参数类型。 4.4 函数的参数传递方式 参数传递方式有值传递和引用传递两种。 4.4.2 引用传递 当形参变量是引用时,形参是实参的引用,对形参的操作就是对实参的操作,那么被调用函数中对形参的改变对调用函数中的实参也有效,这种传递方式被称为引用传递。 值传递与引用传递的不同之处 定义的形式不同,引用传递定义时形参变量前应加。 实参要求不同。值传递传输的是实参的值,因此其可以是变量,也可以是常量或表达式,甚至是函数的返回值。引用传递形参是实参的引用,实参只能是相同类型的变量 功能不同。在值传递时,对形参的改变不影响实参,而在引用传递时,形参是实参的别名,对形参的操作就是对实参的操作 使用场合不一样,绝大多数的参数传递为值传递。引用传递通常应用于某些特殊的场合,利用引用传递的特性将函数多个计算结果返回给调用者。 递归的特点 所有递归的函数的结构都是类似的: 函数要直接或间接调用自身, 要有递归终止条件检查,即递归终止的条件被满足后,则不再调用自身函数。 如果不满足递归终止的条件,则调用涉及递归调用的表达式。在调用函数自身时,有关终止条件的参数要发生变化,而且需向递归终止的方向变化。 【例4.10】采用递归函数求解计算斐波那契数列的前20项 4.6 存储类别和作用域 变量有作用域和生存期的概念。变量的作用域是指变量在程序中有效的空间范围,变量的作用域与定义变量的位置有关,变量的生存期指的是变量生成到变量空间释放的时间范围,变量的生存期与变量的存储类别相关。 文件作用域 在函数外定义的标识符(变量)称为全局标识符(全局变量)。 全局变量的作用域称为文件的作用域,全局变量缺省的作用域是:从定义变量的位置到该源文件结束。 当块作用域内的变量与全局变量同名时,局部变量(块作用域内的变量)优先。 它与块作用域不同的是:在块作用域内可通过域运算符“::”来引用与局部变量同名的全局变量。 4.6.2 变量的存储类别 代码区:存放程序代码,即程序中各个函数的代码块 静态数据区:存放程序的全局数据和静态数据 栈区:存放程序中的局部变量,如函数中的局部变量等 堆区:存放动态分配的数据。 分配在不同区域的变量其生命期是不一样的,如果变量分配在静态区,则在程序开始时分配空间,在程序结束时释放空间,在程序整个延续期,变量都是存在的。 而变量分配在函数的栈空间的话,将随着函数的被调用而产生,随着函数调用的结束而被释放。 变量的生命期与存储类型有关。 C++使用四种说明符auto(自动类型)、register(寄存器类型)、static(静态类

文档评论(0)

1亿VIP精品文档

相关文档