chap6函数与宏定义.ppt
《chap6函数与宏定义.ppt》由会员分享,可在线阅读,更多相关《chap6函数与宏定义.ppt(40页珍藏版)》请在三一文库上搜索。
1、第 6 章 函数与宏定义,6.1 函数概念,C 函数分标准函数(库函数)和自定义函数。, 所有函数都是平行的,相互独立不能嵌套定义,函数间可以相互调用,但不能调用main()函数。,6.1.1 函数的定义,古典形式: 类型标识符 函数名(形式参数表) 形式参数说明; 函数体; 现代简洁形式: 类型标识符 函数名(形参说明表) 函数体; ,例: int max(x,y) int x, y; / 形式参数说明 / int z; / 函数体中的说明部分 / z=xy ? x : y; return(z); ,这两行可以写成一行: int max(int x, int y),例: int max(in
2、t x, int y) int z; / 函数体中的说明部分 / z=xy ? x : y; return(z); ,函数参数和函数的值,1形式参数和实际参数,例 从键盘输入两个数,输出其中较大的一个。 main( ) int a, b, c ; scanf(“%d %d“, , 形参变量在被调用前不占用存储单元;在被调用结束后,形参所占存储单元亦被释放。 实参可以是常量、变量或表达式。 必须指定形参类型,且应与实参的类型一致。 实参对形参的数据传递是“值传递”。即单向传递,不能逆传。,注意:, 函数的返回值是通过return语句获得的。 return语句的后面可以有括号,也可以没有。如: r
3、eturn z ; return(z); return语句的后面可以是变量,也可以是表达式。如: return(x y ? x : y); return语句返回值的类型应与该函数的类型一致。否则以函数类型为准。 函数类型缺省时按整型处理。,2函数的返回值, 若函数中没有return语句,则函数被调用后也会带回不确定的值。, 为了明确表示不需要函数返回值,可以用“void”定义函数为“无类型”。此时,不得使用a=f( )之类的赋值语句。,凡不需要返回值的函数,一般均定义为“void”类型。,1函数调用的一般形式 函数名(实参表) 说明: 对于无参函数,也不得省略一对小括号。 “实参表”中的参数之
4、间用逗号分开。 实参与形参之间的个数及类型必须一一对应。,函数的调用, 将函数调用作为一个语句。如: printf(“MS C pragramming”); gets(s); 将被调用的函数写在表达式中。如: c=2max(a, b); 注意:被调用函数max必须有确定的返回值。 将函数调用作为一个函数的实参。如: m=max(max(a, b), c);,2函数调用的方式,3对被调用函数的说明 在一个函数中调用另一个函数时: 如果被调函数为库函数,则应在文件开头用“#include”命令声明相应的“头文件”。如: #include “stdio.h” #include “math.h”, 如
5、果被调函数为自定义函数且其定义在主调函数定义之后,则应在主调函数中对该函数进行声明。其语句形式一般为: 类型标识符 被调函数名(参数列表); 如:float add(int x, int y );, 如果被调函数为自定义函数且其定义在主调函数定义之前,则在主调函数中可不必声明。 如果已在所有函数定义之前已作了函数声明,则在各主调函数中可不必对所调用的函数再作声明。如: char letter( ); float f( ); int i( ); main( ) / 不必说明它所调用的函数的类型 /,1局部变量 局部变量-在一个函数内部定义的变量,只能在本函数内使用和有效。 主函数main中定义的
6、变量,也只能在主函数内使用和有效。 不同的函数中可以使用相同名字变量,且互不干扰。 形式参数也是局部变量,也只能在所在函数内使用和有效。 可以在一个函数内的复合语句中定义变量,且这些变量只在本复合语句中有效。 这种复合语句也称为“分程序”或“子模块”。,局部变量和全局变量,6.2 变量的作用域和存储类型,2全局变量 全局变量(外部变量)-在函数(包括main函数)外定义的变量。其有效范围为从定义变量的位置开始到本源文件结束。,在文件开头定义的外部变量才可在整个文件范围内使用,若在定义点之前的函数需引用外部变量,则可用关键字“extern”作“外部变量声明”。 注意: 外部变量的定义只能有一次,
7、它的位置在所有函数之外。而同一程序中的外部变量声明可以有多次,它的位置在函数之内(哪个函数要用就在哪个函数中说明)。系统根据外部变量的定义(而不是根据外部变量的说明)分配存储单元。对外部变量的初始化只能在“定义”时进行,“extern”只是申明该变量是一个已在外部定义过的变量而已。 如果在同一源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。,输出结果: 10, 4, 8 10, 2, 5,例 #include “stdio.h“ main( ) int a=1, b=2, c=3; a+; c+=b; int b=4, c; c=2*b; a+=c; printf
8、(“%d,%d,%dn“, a, b, c); printf(“%d,%d,%dn“, a, b, c); getch(); ,内存中供用户使用的存储区由程序区、静态存储区和动态存储区组成。 变量的存储类型有四种: 自动的(auto):内存的动态存储区 静态的(static) :静态存储区 寄存器的(register):寄存器 静态变量在程序的运行期间占用固定的存储空间,直到程序的终止而释放; 动态变量是在程序的运行期间随着函数的调用随时动态地占用和释放存储空间。,变量的存储类型,局部变量的存储方式 函数中的局部变量若未专门说明,这类局部变量称为自动变量,其类型说明前不论是否有关键字“auto
9、”,都属于动态存储类别。,2) 若希望被调函数在结束后,其局部变量占用的存储空间不释放,以便保留其变量的值,用于下次调用该函数,则用“static”说明为 “局部静态变量”。, 局部静态变量 在静态存储区分配存储单元,在程序的整个运行期间都不释放。 在编译时只赋初值一次,以后每次被调用时不再重新赋值而只保留前次被调用结束时的值。 若未赋初值,则在编译时自动赋初值0 (数值型)或空字符(字符 型)。 虽然局部静态变量在函数被调用结束后其值仍然存在,但其它函数是不能引用的。 动态变量 在动态存储区分配存储单元,函数调用结束后即释放。 赋初值不是在编译时而是在函数被调用时进行的,函数每次被调用时重新
10、赋值。 若未赋初值,则其值是不确定的,例 打印1到5的阶乘值。 int fac(int n) static int f =1; / 定义f 为int型静态变量 / f = f n ; return( f ); main( ) int i; for (i=1; i=5; i+) printf(“%d!=%dn”, i, fac(i); ,3全局变量的存储方式 全局变量存储在静态区。 用extern作声明可以引用另一个文件中定义的全局变量。但用static定义的全局变量不能被其它文件引用。,根据函数是否能被其它文件所调用,分为: 1内部函数-只能被本文件的其它函数所调用的函数 定义方式 如: st
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- chap6 函数 定义
链接地址:https://www.31doc.com/p-2976395.html