(C课件)函数定义与调用(函数1)

上传人:宝路 文档编号:48326197 上传时间:2018-07-13 格式:PPT 页数:49 大小:493.54KB
返回 下载 相关 举报
(C课件)函数定义与调用(函数1)_第1页
第1页 / 共49页
(C课件)函数定义与调用(函数1)_第2页
第2页 / 共49页
(C课件)函数定义与调用(函数1)_第3页
第3页 / 共49页
(C课件)函数定义与调用(函数1)_第4页
第4页 / 共49页
(C课件)函数定义与调用(函数1)_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《(C课件)函数定义与调用(函数1)》由会员分享,可在线阅读,更多相关《(C课件)函数定义与调用(函数1)(49页珍藏版)》请在金锄头文库上搜索。

1、 在结构化程序设计中,函数是将任务进行模块划分的基 本单位。一个函数实现一项功能。在面向对象程序设计中,函数是对数据的一项操作,也 是实现一项功能。第四章 函 数 要掌握函数的使用,必须理解函数调用时的内部实现机 制,以及与此相关的内存分配机制、变量生命期和作用域。本章还将介绍关于函数重载的概念,介绍递归算法 、内联函数、默认参数函数以及编译预处理、工程文件 的概念和运行库函数。第4章 函数 4.1 函数的定义与调用 4. 5 作用域与标识符的可见性 4.4 函数调用机制 4.3 全局变量和局部变量 4.2 函数的参数传递,返回值及函数声明 4.8 编译预处理 4.6 存储类型与标识符的生命期

2、 4.7 函数的递归调用 4.1 函数的定义与调用4.1.1 函数概述4.1.2 函数的定义4.1.3 函数的调用 4.1.1 函数概述函数是C+程序的基本组成模块。通过函数,可以把一个复杂任务分解成为若干 个易于解决的小任务。充分体现逐步细化的设计思想 。组成C+程序的若干函数中,有一个称为main() (Winmain())函数,是程序执行的入口,它可以调 用其他函数,但不可以被调用。而其他一般函数既可 以调用也可以被调用。函数概念的引入:入口函数:4.1.1 函数概述main ( )fun2( )fun1( )fun3( )funa( )funb( )func( )图4.1 函数调用层次

3、关系4.1.1 函数概述库函数和自定义函数:库函数或标准函数,是由编译系统预定义的, 如一些常用的数学计算函数、字符串处理函数、图 形处理函数、标准输入输出函数等。库函数都按功能分类,集中说明在不同的头文 件中。用户只需在自己的程序中包含某个头文件, 就可直接使用该文件中定义的函数。用户根据需要将某个具有相对独立功能的程序 定义为函数,称自定义函数。4.1.2 函数的定义无参函数定义格式为:数据类型 函数名(void)函数体说明:数据类型指函数返回值类型,可以是任一种数据类型, 默认为返回整型值(但新标准要求写明,不用默认方式)。 没有返回值应将返回值类型定义为void。函数名采用合法标识符表

4、示。对无参函数,参数括号中的void通常省略,但括号不能 省略。函数体由一系列语句组成。函数体可以为空,称为空函 数。 1 1 无参函数无参函数4.1.2 函数的定义/打印一个表头 void TableHead() coutn; while(n=b?a:b); 有参函数的参数表中列出所有形式参数的类型和参数名 称。各参数即使类型相同也必须分别加以说明。形式参数简称形参,只能是变量名,不允许是常量或表 达式。 void delay(long n) int i; for (i=0;i float max(float a,float b) return(a=b?a:b); int main() fl

5、oat x,y; coutxy; cout #include float TriangleArea(float a, float b, float c) if (a+babc;area=TriangleArea(a,b,c);if(area=-1) coutchoice;while(choice=4);switch(choice) case 1: account_report(); break;case 2: engineering_report(); break;case 3: marketing_report(); break; return 0; void menu_print() co

6、utab;cout=a) int t; /具有块域 t=a; a=b; b=t; /交换a,b的值cout void swap(int,int); int main() int a,b; /a,b作用域为main()coutab;cout int main() int i=200,j=300; cout ntitjendl;/内部块int i=500,j=600,n;n=i+j;cout ntitj endl;/输出局部变量ncout:nendl;/输出全局变量n n=i+j;/修改全局变量 cout ntitj endl; return 0;2函数声明域 函数声明不是定义函数,在作函 数声明

7、时,其中的形参作用域只在 声明中,即作用域结束于右括号。 正是由于形参不能被程序的其他地 方引用,所以通常只要声明形参个 数和类型,形参名可省略。3 文件域 文件域也称全局域。定义在所有函数之外的标识符作 用域为从定义处到整个源文件结束,即文件域 。文件 中定义的全局变量和函数的作用域为文件域。如果某个文件中说明了作用域为文件域的标识符,该 文件又被另一个文件包含,则该标识符的作用域延伸 到新的文件中。如cin和cout是在头文件iostream中说明 的具有文件作用域的标识符,它们的作用域也延伸到 嵌入iostream的文件中。存储类型(storage class)决定标识符的存储 区域,即

8、编译系统在不同区域为不同存储类型的标 识符分配空间。由于存储区域不同,标识符的生命 期也不同。所谓生命期,指的是标识符从获得空间 到空间释放之间的期间,标识符只有在生存期中、 并且在其自己的作用域中才能被访问。4.6 存储类型与标识符的生命 期 4.6.1 4.6.1 存储类型存储类型4.4.4.2 4.2 生命期生命期 自动变量为用auto说明的变量,通常auto缺省。局部变量都是自 动变量,生命期开始于块的执行,结束于块的结束,其原 因是自动变量的空间分配在栈中,块开始执行时系统自动 分配空间,块执行结束时系统自动释放空间。故自动变量 的生命期和作用域是一致的。4.6.1 存储类型 为提高

9、程序运行效率,可以将某些变量保存在寄存器中,即用 register说明为寄存器变量,但不提倡使用。C+中关于存储类型的说明符(storage class specifier)有四 个:auto、register、static和extern。其中用auto和register修 饰的称为自动存储类型,用static修饰的称为静态存储类型, 用extern修饰的称为外部存储类型。1 自动存储类型static说明的变量称为静态变量。根据定义的位置不同,还 分为局部静态变量和全局静态变量,也称内部静态变量和外部 静态变量。静态变量均存储在全局数据区,如果程序未显式给 出初始化值,则等效初始化为全0;静态

10、变量占有的空间要到整 个程序执行结束才释放,故静态变量具有整个程序执行期间的 生命期。4.6.1 存储类型局部静态变量是定义在块中的静态变量,编译系统在全局数据 区为其开辟空间并保存数据,该空间一直到整个程序结束才释 放。局部静态变量具有局部作用域,但却具有整个程序执行期 间的生命期。如果显式给出初始化值,则在该块第一次执行时 完成,且只进行一次。2 2 静态存储类型静态存储类型【例4.10】 自动变量与局部静态变量的区别4.6.1 存储类型3 3 外部存储类型外部存储类型一个C+程序可以由多个源程序文件组成。多文件程序系统可 以通过外部存储类型的变量和函数来共享某些数据和操作。在一个程序文件

11、中定义的全局变量和函数缺省为外部的,即其作 用域可以延伸到程序的其他文件中。其他文件如果要使用这个文 件中定义的全局变量和函数,应该在使用前用“extern”作外部声 明。外部声明通常放在文件的开头(函数总是省略extern)。外部变量声明不同于全局变量定义,变量定义时编译器为其分 配存储空间,而变量声明则表示该全局变量已在其他地方定义 过,编译系统不再分配存储空间。外部的全局变量或函数加上static修饰,就成为静态全局变量 或静态函数。静态的全局变量和函数作用域限制在本文件,其 他文件即使使用外部声明也无法使用该全局变量或函数。 【例4.11】外部存储类型的例子4.6.2 生命期1. 静态

12、生命期静态生命期(Static extent或Static storage duration)指 的是标识符从程序开始运行时就存在,具有存储空间,到程 序运行结束时消亡,释放存储空间。具有静态生命期的标识 符存放在全局数据区,如全局变量、静态全局变量、静态局 部变量。具有静态生命期的标识符在未被用户初始化的情况 下,系统会等效将其初始化为全0。函数驻留在代码区,也具有静态生命期。所有具有文件 作用域的标识符都具有静态生命期。4.6.2 生命期2. 2. 局部生命期局部生命期在函数内部或块中定义的标识符具有局部生命期 (Automatic extent或Automatic storage dur

13、ation), 其生命期开始于执行到该函数或块的标识符定义处, 结束于该函数或块的结束处。具有局部生命期的标识 符存放在栈区。具有局部生命期的标识符如果未被初 始化,其内容是随机的,不可引用。具有局部生命期的标识符必定具有局部作用域; 但反之不然,静态局部变量具有局部作用域,但却具 有静态生命期。4.6.2 生命期具有动态生命期(dynamic extent或dynamic storage duration)的标识符存放在自由存储区 ,由特定的函数调用或运算来创建和释放,如 用new运算符(或调用malloc()函数)为变量分 配存储空间时,变量的生命期开始,而用delete 运算符(或调用free()函数)释放空间或程序结 束时,变量生命期结束。关于new运算符和 delete运算符将在第七章中介绍。4. 动态生命期

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号