C语言程序设计教程 教学课件 ppt 作者 宗大华 陈吉人 第6章

上传人:E**** 文档编号:89346933 上传时间:2019-05-23 格式:PPT 页数:25 大小:96KB
返回 下载 相关 举报
C语言程序设计教程 教学课件 ppt 作者  宗大华 陈吉人 第6章_第1页
第1页 / 共25页
C语言程序设计教程 教学课件 ppt 作者  宗大华 陈吉人 第6章_第2页
第2页 / 共25页
C语言程序设计教程 教学课件 ppt 作者  宗大华 陈吉人 第6章_第3页
第3页 / 共25页
C语言程序设计教程 教学课件 ppt 作者  宗大华 陈吉人 第6章_第4页
第4页 / 共25页
C语言程序设计教程 教学课件 ppt 作者  宗大华 陈吉人 第6章_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《C语言程序设计教程 教学课件 ppt 作者 宗大华 陈吉人 第6章》由会员分享,可在线阅读,更多相关《C语言程序设计教程 教学课件 ppt 作者 宗大华 陈吉人 第6章(25页珍藏版)》请在金锄头文库上搜索。

1、第 6 章 函 数,本章着重讲述4个方面的内容: (1)定义函数的方法。 (2)编写程序时,调用函数和被调函数的位置关系。 (3)调用函数和被调函数间数据传递的各种方式。 (4)程序中各个变量的作用域和生命期。,6.1 函数的概念,所谓“函数”,是程序中可以反复使用的一个程序段,其它函数可以通过调用语句来执行这段程序,完成所需要的工作。 C语言本身为用户提供了很多函数,这称为“系统函数”。程序设计者自己编写的函数,称为“用户函数”。,6.1.1 函数的定义 函数定义的一般格式是: () ,其中: (1):是所定义函数在执行完后返回结果的数据类型,即返回值的类型。 (2):是所定义函数的名称,它

2、可以是C语言中任何合法的标识符。,(3):形式参数表中列出的形式参数,简称“形参”。被调函数就是通过这些形参,接收从调用函数传递过来的数据。定义的函数可以有参数,也可以没有参数。如果定义的函数有形参,则称为“有参函数”,否则就是“无参函数”。 (4):函数体由一对花括号“ ”括起,它由变量说明语句和执行语句序列组成。,6.1.2 函数的调用 根据一个函数是否有返回值,C语言将以不同的方式对它们进行调用。 (1)没有返回值的函数,是以函数调用语句的方式进行调用的。即: ();,(2)有返回值的函数,是以函数表达式的方式调用的。即: () 这两种调用方式根本的不同是:前者是一个语句,以分号结尾;后

3、者是一个表达式,凡是一般表达式能够出现的地方,它都可以出现。,函数调用时给出的中,必须列出与被调函数定义中所给形参个数相等、类型相符、次序相同的实参,各实参之间仍以逗号为分隔符。否则就会出现语法错误。,6.1.3 函数的原型说明 在函数中调用一个用户函数时,必须首先保证这个被调用的用户函数已经存在。如果放的位置颠倒了,若被调函数返回值的类型是int、char,那么不会产生什么影响;若被调函数返回值的类型是非int、非char,即返回值的类型是float、double或void等,那么编译时就会给出出错信息。,C语言提供了两种解决这个问题的办法,一是把被调用者与调用者的位置重新放正确;二是保持这

4、种颠倒的位置关系,但在整个程序最前面或在调用函数里先对被调函数做一个说明,这就是所谓的“函数原型说明”。,函数原型说明的一般格式是: (); 它类同于函数定义中的函数头,但有两点区别:一是函数定义中函数头里给出的是形式参数表,它由“ ”对组成,函数原型说明里给出的是形参类型表,它只列出“”;二是函数原型说明要以分号为结尾,成为一条说明语句。,6.1.4 变量的作用域和生命期 1全局变量、局部变量与变量的作用域 编写程序时,C语言允许在3个地方说明变量。 (1)在所有函数之外。这种变量称为“全局变量”,它可以被该程序中的所有函数使用。,(2)在某个函数(或复合语句)里面。这种变量称为“局部变量”

5、,它只能在说明它的范围内使用。 (3)作为函数的形参。这类变量也是局部变量,其作用就是用于接收调用者传递过来的实参数据,出了函数,该变量就不能使用了。,在C语言中,称一个变量的作用范围为“变量的作用域”。由于每个变量都有自己的作用域,因此在不同函数内说明的局部变量就可以使用相同的变量名,类型也可以不一样。它们不会因为名字相同而互相干扰。C语言规定,在一个源程序文件中,当所说明的全局变量与某个函数内说明的局部变量同名时,那么在该局部变量的作用域,全局变量就不起作用。,2自动变量、静态变量与变量的生命期 (1)在函数内说明一个变量(它当然是一个局部变量)时,若将其存储类型说成是auto,或没有给出

6、它的存储类型,那么这个变量是自动型的。这时,只有在调用函数而遇到这种变量时,C语言才在动态存储区里为它们分配所需要的存储区,函数调用完毕,就立即收回它们占用的存储区。从这样的处理过程可以看出,每次调用函数,都必须重新为自动型变量分配存储区,重新进行初始化。,(2)在函数内说明一个变量(它当然是一个局部变量)时,若将其存储类型说成是static,那么这个变量是静态型的。对于静态变量,C语言是编译时在静态存储区里为它们分配所需要的存储区,即使函数调用完毕,也不收回分配给它的存储区,直至程序运行结束。如果程序中说明静态变量时对它做了初始化,那么这种初始化只做一次,下次再调用就只是沿用上次调用后的取值

7、,不再初始化了。,在C语言中,称一个变量说明后它存在的时间区间为“变量的生命期”。对于自动变量,它只在其作用域里存在,出了作用域就不存在了。因此自动变量的生命期就是它的作用域;对于静态变量,在它的作用域里存在,出了作用域它仍然存在(只是不能使用)。因此静态变量的生命期比它的作用域来得大。,6.2 函数调用中的数据传递,6.2.1 参数是普通变量时的数据传递过程 当调用者与被调用者之间是以普通变量作为参数进行数据传递时,调用者是把实参变量的值赋给被调用者的形参变量的。由于实参变量和形参变量占用的是内存中不同的存储区,被调函数对形参的加工,是在形参变量自己的存储区里进行,所以根本不会影响到实参变量

8、。称这种数据传递是“单向的”。,6.2.2 参数是指针变量时的数据传递过程 当调用者与被调用者之间是以指针变量作为参数进行数据传递时,调用者是把实参指针变量的值赋给被调用者的形参指针变量的。于是,实参指针变量和形参指针变量虽然在内存中位于不同的存储区,但它们的内容却都是同一个地址,即它们是指向内存中同一个存储区的两个不同的指针。,于是,被调函数中对形参所指变量的任何处理,也就是在对实参所指变量做相同的处理。因此,从被调函数返回调用者时,处理结果就在实参指针所指变量里面保存着。调用者和被调用者,通过共同指向的存储区,“双向的”传递了信息:调用者通过这个存储区,把要加工的信息传递给被调用者;被调用

9、者又通过这个存储区,将加工完的结果信息传递给调用者。,6.2.3 参数是数组名时的数据传递过程 1以长度固定的数组作为函数参数 2以非固定长度数组作为函数参数 当以数组为参数在函数间传递数据时,实参与形参共享同一个存储区。 由于数组名是一个地址(指针),所以在调用者将实参数组名传递给被调函数时,与它对应的形参也可以是一个指针变量。,6.2.4 返回语句return 返回语句return都出现在被调函数中,它的作用是返回调用者,并向调用者传递计算结果。该语句有两种使用格式: 格式1:return; 格式2:return (); 第1种格式用于无返回值的被调函数。它不返回任何值,只是起一个返回调用

10、者的作用。第2种格式一方面返回调用者,同时把圆括号里的值传递给调用者。,6.3 指针型函数,如果一个函数的返回值是一个指针(地址),那么就说这个函数是返回指针的函数,即“指针型函数”。 指针型函数属于有返回值函数,且返回的是一个地址值。因此调用这种函数时,在调用者里接受返回值的必须是指针变量,或是指针数组元素等,而不能是其它。,6.3.1 指针型函数的定义方法 指针型函数的定义格式和一般函数的定义格式基本相同,只是要在所定义函数名的前面冠以一个“*”。即: * () ,6.3.2 指针型函数的使用 指针型函数的用法,与其它函数一样,没有什么特殊的地方。只是应该注意两点: (1)定义中出现的“*”,只表明这是一个返回指针的函数,并不是函数名的一部分。 (2)对指针型函数进行调用之后,要把它的返回值赋给相同指针类型的变量。,

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

当前位置:首页 > 高等教育 > 大学课件

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