收藏 分享(赏)

C++程序设计第4章.ppt

上传人:11xg27ws 文档编号:8656651 上传时间:2019-07-07 格式:PPT 页数:151 大小:2.66MB
下载 相关 举报
C++程序设计第4章.ppt_第1页
第1页 / 共151页
C++程序设计第4章.ppt_第2页
第2页 / 共151页
C++程序设计第4章.ppt_第3页
第3页 / 共151页
C++程序设计第4章.ppt_第4页
第4页 / 共151页
C++程序设计第4章.ppt_第5页
第5页 / 共151页
点击查看更多>>
资源描述

1、小结: 1、for语句for(i=1;i1)y=0;else y=1; 3、循环结构(三种和嵌套), 例:while(x1) y+;x-;,基本结构小结: 例: x=3; y=1; if(x1)y=0; else y=1; while(x1) y+; x-; coutxy;顺序结构,第4章 函数与预处理,一般, 一个大的程序划分为若干个程序模块(即程序文件), 每一个模块实现一部分功能。不同的程序模块可以由不同的人来完成。在程序进行编译时, 以程序模块为编译单位, 即分别对每一个编译单位进行编译。在分别通过编译后, 才进行连接, 把各模块的目标文件以及系统文件连接在一起形成可执行文件。,4.1

2、 概述,一个C程序是由若干个函数组成的, C语言被认为是面向函数的语言。C+面向过程的程序设计沿用了C语言使用函数的方法。C+面向对象的程序设计中, 主函数以外的函数大多是被封装在类中的。主函数或其他函数可以通过类对象调用类中的函数。程序编写者要根据需要编写一个个函数, 每个函数用来实现某一功能。,“函数“= function。一个函数就是一个功能。在实际应用的程序中, 主函数写得很简单, 它的作用就是调用各个函数, 程序各部分的功能全部都是由各函数实现的。主函数相当于总调度, 调动各函数依次实现各项功能。程序开发人员要善于利用库函数, 以减少重复编写程序段的工作量。,1、一个较大的程序可由一

3、个主函数和若干个函数构成。主函数:void main( )其它函数 : 1)库函数:直接调用(标准函数)2)用户自己定义函数(编写程序),2、主函数调用其它函数, 其它函数也可以相互调用。,3、函数的作用:减少重复编写程序段的工作量, 提高程序的可读性。(多次使用的程序段, 可单独编写成函数)例4.1 用户编写的函数:printstar( );print_message( );,例4.1 在主函数中调用其他函数。 #include using namespace std;void printstar() cout“* “endl; void print_message(void) cout“

4、Welcome to C+!“endl; ,int main(void) printstar( ); print_message( ); printstar( ); return 0; ,运行情况如下: *Welcome to C+! *,4、从函数的形式上分类:1)无参函数如:void print_message(void) 2)有参函数如:int max(int x, int y).5、从函数的返回值上分类1)有值函数 如: int main(void).return 0;2)无值函数 void print_message(void) ,类型标识符_函数名(void)声明部分语句 说明:类

5、型标识符指定函数返回值的类型。,4.2 定义函数的一般形式 4.2.1 定义无参函数的一般形式,函数声明部分,函数体,例:,int print_message( )cout“How do you do!n“endl;函数类型:有值、无参、返回值为int型。(返回值不确定)?,4.2.2、定义有参函数的一般形式类型标识符_函数名(形参说明表列) 函数说明部分声明部分 语句 函数体,例:,int max(int x, int y)int z;z=xy?x:y;return(z);函数名max, 函数类型: 有参、有值返回值类型int返回确定值(return语句),4.3函数参数和函数的值,4.3.

6、1形式参数和实际参数主调函数函数之间的关系被调用函数主调函数:调用其它函数的函数被调用函数:定义的函数库函数,例4.2 调用函数时的数据传递。 #include using namespace std; int max(int x, int y) int z;z=xy?x:y;return(z);,int main( ) int a, b, c;coutab;c=max(a, b); cout“max=“cendl;return 0; ,运行情况如下: please enter two integer numbers:2 3 max=3,图4.2,1)实参传给形参 2)返回值传给主调函数,1、

7、形参定义函数时, 函数名后面的变量称为“形参“。(formal parameter)2、实参在调用函数时, 函数后面括弧中的变量称为“实参“。(actual parameter),一些说明: 实参和其对应形参各占用独立的存储单元。(调用结束后, 形参内存立即释放) 例: int x, y, z;z=max(x, y);函数:int max(int x, int y)int z;z=xy?x:y;return(z);,2)实参可以是常量、变量、表达式, 但要有确定值。int x=1, y=2, z, a=4, b=3;z=max(3+x, 3+y);z=max(a+x, b+y);3) 在定义函

8、数时, 必须在函数首部指定形参的类型。int max(int x, int y) int z;z=xy?x:y;return(z);,4)实参和其对应形参类型一致。例:float x, y, z;z=max(x, y);,5)在调用函数时, 将实参的数值传递给形参变量。(单向传递)例:int m1(int x, int y) /调用时分配 x=10;y=15; return(x+y); /此时, 释放x, y内存空间void main( )int a=2, b=3, c;c= m1(a, b);coutcendl; /此时, 释放a, b, c内存空间,4.3.2函数的返回值(定义时明确),函

9、数可以有返回值, 也可以无返回值1) 返回值, 用return语句(有括号和无括号都可)格式:1) return(z);2) return z; (注意空格)注意:return后面的值可以是一个表达式。return(xy?x:y);,2)函数返回值的类型在函数定义时, 用类型标识符说明。例1:int max(float x, float y)return(xy?x:y);调用:int c c=max(1.5, 2.5)值:2,3) 如果函数值的类型和return语句中表达式的值不一致, 则以函数类型为准, 即函数类型决定返回值的类型。对数值型数据, 可以自动进行类型转换。例1:int max(

10、float x, float y)return(xy?x:y);调用:int c ;c=max(1.5, 2.5);值:2,例2:float max(float x, float y)return(xy?x:y); 调用:float d; d=max(1.5, 2.5);值:2.5,4、为了明确表示“不带回值“, 可以用“void“ 定义无类型。(无值) 例:void printstar( )调用:a=printstar( );,4.4函数的调用(主调函数中使用),4.4.1函数调用的一般形式函数名(实参表列);注意:1)实参与形参的个数应相等, 类型应一致, 但变量名可不相同。2)实参与形参

11、按顺序对应。3)无参函数, 则无实参, 但括号不可省略。,例:int max(int x, int y)return(xy?x:y);void main( )int x=1, y=2, a=3, b=4, c;c=max(y, x);c=max(y, a);c=max(a, b);,4.4.2函数调用方式(3种),1、函数语句 例:printsart( );max(3, 5);适合有值、无值函数。有值时, 此值不被需要。,2、函数表达式例: c=2*max(a, b);适合有值函数。带值回来参与运算。3、函数的实参例:m=max(a, max(x, y);适合有值函数。带值回来做实参。,1、调

12、用函数的条件: 1) 函数必须是存在。 2) 函数如果是库函数, 用#include命令 包含到本文件中。3) 函数如果是用户定义的函数, 则需声明(在主调函数中)。“先声明, 后使用“(使用函数)函数声明(declare): 在函数尚在未定义的情况下, 事先将该函数的有关信息通知编译系统, 以便使编译能正常进行。,4.4.3 对被调用函数的声明和函数原型,例4.3 对被调用的函数作声明。 #include using namespace std; int main( ) float add(float x, float y); float a, b, c;coutab;c=add(a, b)

13、;cout“sum=“cendl;return 0;,float add(float x, float y) float z;z=x+y;return (z);,运行情况如下: please enter a, b:123.68 456.45 sum=580.13,注意: 对函数的定义和声明不是同一件事情。定义是指对函数功能的确立。声明则是把函数的名字、函数类型以及形参的个数、类型和顺序(注意, 不包括函数体)通知编译系统。(例如函数名是否正确, 实参与形参的类型和个数是否一致)。,2、声明格式-函数原型(function prototype) 函数原型的一般形式为 (1) 函数类型 函数名(参

14、数类型1, 参数类型2); (2) 函数类型 函数名(参数类型1 参数名1, 参数类型2 参数名2);例: float add(float, float);float add(float a, float b); 参数名不用x、y, 而用a、b , 效果完全相同。一般习惯用:float add(float, float);,3、可不用声明的情况 1)如果被调用函数的定义出现在主调函数之前, 可以不必加以声明。因为编译系统已经事先知道了已定义的函数类型, 会根据函数首部提供的信息对函数的调用作正确性检查。( 有经验的程序编制人员一般都把main函数写在最前面, 这样对整个程序的结构和作用一目了然

15、, 统览全局, 然后再具体了解各函数的细节。此外, 用函数原型来声明函数, 还能减少编写程序时可能出现的错误。),2)在函数外部已做了函数声明, 在主调函数中可以不必加以声明。 例: char letter(char, char); float f(float, f loat);int i(float, float);int main( )char letter(char c1, char c2)float f(float x, float y) int i(float j, float k) (如果一个函数被多个函数所调用, 用这种方法比较好, 不必在每个主调函数中重复声明。),调用函数时需

16、要一定的时间和空间的开销。图4.5表示函数调用的过程:图4.5,*4.5 内置函数,内置函数(inline function) 在编译时将所调用函数的代码直接嵌入到主调函数中, 而不是将流程转出去。这种嵌入到主调函数中的函数称为内置函数(inline function), 又称内嵌函数。内联函数。指定内置函数的方法很简单, 只需在函数首行的左端加一个关键字inline即可。,例4.4 函数指定为内置函数。 #include using namespace std; inline int max(int, int, int); int main( ) int i=10, j=20, k=30,

17、m;m=max(i, j, k);cout“max=“mendl;return 0; ,编译系统在遇到函数调用“max(i, j, k)“时, 就用max函数体的代码代替“max(i, j, k)“, 同时将实参代替形参。,程序第6行 “m=max(i, j, k);“就被置换成: if (ji) i=j;if(ki) i=k;m=i;,inline int max(int a, int b, int c) if(ba) a=b; if(ca) a=c;return a; 注意: 可以在声明函数和定义函数时同时写inline, 也可以只在其中一处声明inline。使用内置函数可以节省运行时间,

18、 但却增加了目标程序的长度。,规模很小(一般为5个语句以下) 、频繁的函数(如定时采集数据的函数)声明为内置函数。内置函数中不能包括复杂的控制语句, 如循环语句和switch语句。对函数作inline声明, 对编译系统是建议性的, 而不是指令性的。,1、定义同一函数名定义多个函数, 这些函数的参数个数和参数类型不同。调用时:函数的重载(function overloading)。,*4.6 函数的重载,2、目的-在编程时, 有时我们要实现的是同一类的功能, 只是有些细节不同。 例: 1)希望从3个数中找出其中的最大者, 而每次求最大数时数据的类型不同, 可能是3个整数、3个双精度数或3个长整数

19、。 2)程序设计者不必分别设计出3个不同名的函数。则使用函数重载, 对一个函数名重新赋予它新的含义, 使一个函数名可以多用。函数重载, 其函数原型为: int max(int , int, int); double max(double a, double b, double c); long max(long a, long b, long c);,例4.5 求3个数中最大的数。 (分别考虑整数、双精度数、长整数的情况) #include using namespace std; int main( ) int max(int, int, int); double max(double, d

20、ouble, double); long max(long, long, long);,int i1, i2, i3, i; cini1i2i3; i=max(i1, i2, i3); coutd1d2d3; d=max(d1, d2, d3); coutg1g2g3; g=max(g1, g2, g3); cout“g_max=“gendl;,运行情况如下: 1 2 3 i_max=3 1. 2. 3. d_max=3.00000 1 2 3 g_max=3,int max(int a, int b, int c) if(ba) a=b;if(ca) a=c;return a;double

21、max(double a, double b, double c) if(ba) a=b;if(ca) a=c;return a;long max(long a, long b, long c) if(ba) a=b;if(ca) a=c;return a;,例4.6 编写一个程序, 用来求两个整数或3个整数中的最大数。如果输入两个整数, 程序就输出这两个整数中的最大数, 如果输入3个整数, 程序就输出这3个整数中的最大数。 #include using namespace std; int main( ) int max(int , int b, int c); int max(int a,

22、 int b); int a=8, b=-12, c=27;cout“max(a, b, c)=“max(a, b, c)endl; cout“max(a, b)=“max(a, b)endl; ,运行情况如下: max(a, b, c)=27 max(a, b)=8,int max(int a, int b, int c)if(ba) a=b;if(ca) a=c;return a;int max(int a, int b) if(ab) return a;else return b;,说明: 1)参数的个数和类型可以都不同。但不能只有函数的类型不同而参数的个数和类型相同。 例: int f

23、(int); long f(int); void f(int); 在函数调用时都是同一形式, 如“f(10)“。 编译系统无法判别应该调用哪一个函数。无法重载。2)在使用重载函数时, 同名函数的功能应当相同或相近, 不要用同一函数名去实现完全不相干的功能, 虽然程序也能运行, 但可读性不好, 使人莫名其妙。,1、C+提供了函数模板(function template)。 2、函数模板实际上是建立一个通用函数, 其函数类型和形参类型不具体指定, 用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替, 不必定义多个函数, 只需在模板中定义一次即可。在调用函

24、数时系统会根据实参的类型来取代模板中的虚拟类型, 从而实现了不同函数的功能。,*4.7 函数模板,例4.7 将例4.5程序改为通过函数模板来实现 #include using namespace std; template T max(T a, T b, T c) if(ba) a=b;if(ca) a=c;return a;,int main( ) int i1=185, i2=-76, i3=567, i;double d1=56.87, d2=90.23, d3=-3214.78, d;long g1=67854, g2=-912456, g3=673456, g;i=max(i1, i

25、2, i3); d=max(d1, d2, d3); g=max(g1, g2, g3); cout“i_max=“iendl;cout“f_max=“fendl;cout“g_max=“gendl;return 0; ,运行情况如下: i_max=567 d_max=90.2300 g_max=673456,3、定义函数模板的一般形式 template 或 template (通用函数定义 )例1: template T max(T a, T b, T c) if(ba) a=b;if(ca) a=c;return a; 例2:类型参数可以不只一个, 可以根据需要确定个数。template

26、,1、C+提供简单的处理办法, 给形参一个默认值, 这样形参就不必一定要从实参取值了。 例:有一函数声明float area(float r=6.5);指定r的默认值为6.5。 1)如果在调用此函数时, 确认r的值为6.5, 则可以不必给出实参的值。area( ); /相当于area(6.5); 2)如果不想使形参取此默认值, 则通过实参另行给出。area(7.5); /形参得到的值为7.5, 而不是6.5,*4.8 有默认参数的函数,2、这种方法比较灵活, 可以简化编程, 提高运行效率。 例如: 有一个求圆柱体体积的函数, 形参h代表圆柱体的高, r为圆柱体半径。函数原型如下:float v

27、olume(float h, float r=12.5); /只对形参r指定默认值12.5函数调用可以采用以下形式: volume(45.6); /相当于volume(45.6, 12.5)volume(34.2, 10.4) /h的值为34.2, r的值为10.4,3、实参与形参的结合是从左至右顺序进行的。因此指定默认值的参数必须放在形参表列中的最右端, 否则出错。 例:void f1(float a, int b=0, int c, char d=a); /不正确void f2(float a, int c, int b=0, char d=a); /正确 调用f2函数, 可以采取下面的形

28、式: f2(3.5, 5, 3, x) f2(3.5, 5, 3) f2(3.5, 5),例4.8 求2个或3个正整数中的最大数, 用带有默认参数的函数实现。 #include using namespace std; int main( ) int max(int a, int b, int c=0); int a, b, c;cinabc;cout“max(a, b, c)=“max(a, b, c)endl; cout“max(a, b)=“max(a, b)endl; return 0;,运行情况如下: 14 -56 135 max(a, b, c)=135 max(a, b)=14,

29、int max(int a, int b, int c) if(ba) a=b;if(ca) a=c;return a;,注意: 如果函数的定义在函数调用之前, 则应在函数定义中给出默认值。如果函数的定义在函数调用之后, 则在函数调用之前需要有函数声明, 此时必须在函数声明中给出默认值, 在函数定义时可以不给出默认值(如例4.8)。(3) 一个函数不能既作为重载函数, 又作为有默认参数的函数。出现二义性, 系统无法执行。,4.9 函数的嵌套调用,1、什么是嵌套调用?在调用一个函数的过程中, 又调用另一个函数。 (或:在一个函数的定义中, 调用了另一个函数) 2、可嵌套调用函数, 不可嵌套定义函

30、数。实参 形参,例4.9 用弦截法求方程f(x)=x3-5x2+16x-80=0的根。这是一个数值求解问题, 需要先分析用弦截法求根的算法。根据数学知识, 可以列出以下的解题步骤: 取两个不同点x1, x2, 如果f(x1)和f(x2)符号相反, 则(x1, x2)区间内必有一个根。如果f(x1)与f(x2)同符号, 则应改变x1, x2, 直到f(x1), f(x2)异号为止。注意x1、x2的值不应差太大, 以保证(x1, x2)区间内只有一个根。,图4.7,(2) 连接(x1, f(x1)和(x2, f(x2)两点, 此线(即弦)交x轴于x, 见图4.7。 x点坐标可用下式求出:x=x1f

31、(x2)-x2f(x1)f(x2)-f(x1) 再从x求出f(x)。(3) 若f(x)与f(x1)同符号, 则根必在(x, x2)区间内, 此时将x作为新的x1。如果f(x)与f(x2)同符号, 则表示根在( x1, x)区间内, 将x作为新的x2。(4) 重复步骤 (2) 和 (3), 直到 f(x)为止, 为一个很小的正数, 例如10-6。此时认为 f(x)0。,这就是弦截法的算法, 在程序中分别用以下几个函数来 实现以上有关部分功能:用函数f(x)代表x的函数:x3-5x2+16x-80。(2) 用函数xpoint (x1, x2)来求(x1, f(x1)和(x2, f(x2)的连线与x

32、轴的交点x的坐标。(3) 用函数root(x1, x2)来求(x1, x2)区间的那个实根。显然, 执行root函数的过程中要用到xpoint函数, 而执行xpoint函数的过程中要用到f函数。,根据以上算法, 可以编写出下面的程序: #include #include #include using namespace std; double f(double); double xpoint(double, double); double root(double, double);,int main( ) double x1, x2, f1, f2, x;docoutx1x2;f1=f(x1)

33、;f2=f(x2); while(f1*f2=0);x=root(x1, x2);coutsetiosflags(iosfixed)setprecision(7); cout“A root of equation is “xendl;return 0;,运行情况如下: input x1, x2:2.5 6.7 A root of equation is 5.0000000,double f(double x) double y;y=x*x*x-5*x*x+16*x-80;return y;double xpoint(double x1, double x2) double y;y=(x1*f(

34、x2)-x2*f(x1)/(f(x2)-f(x1); return y;,double root(double x1, double x2) double x, y, y1;y1=f(x1);dox=xpoint(x1, x2); y=f(x); if (y*y10)y1=y;x1=x;else x2=x;while(fabs(y)=0.00001);return x; ,注意数值传递性,小结:1、函数定义时, 定义:1)函数名2)形参3)返回值构成: 有参、无参函数有值、无值函数返回值: 用return语句(有括号和无括号都可)格式:1) return(z);2) return z; (注意

35、空格)2、调用函数时:实参值 形参函数值 主调函数,小结: 3、函数1)函数的定义:函数名, 函数的形参, 函数的返回值类型, 函数体2)函数的使用调用格式:函数名(实参表列),调用方式:语句调用, 表达式调用, 实参调用,小结: 4、函数1)函数的定义:2)函数的声明:函数原型;(可不声明的情况)3)函数的使用: 调用 5、内置函数(inline) (形参用实参代替, 代码直接嵌入) 6、函数的重载多个函数名相同, 但形参不同, 为函数重载。调用时按实参去选择重载何个函数。 7、函数模板template T max(T a, T b, T c) 调用:int x=1, y=2, z=3, c

36、;c=max(x, y, z); 1,小结: 8、有默认参数的函数 函数声明: float area(float r=6.5); 调用: area( );或 area(7.5);注意:void f2(float a, int c, int b=0, char d=a); /正确,小结: 9、嵌套调用定义函数时调用其他函数。函数定义: float f(float x)return(x*x-2);float y(float x1, float x2)return(f(x1)-f(x2);,1、递归调用 在调用一个函数的过程中又出现直接或间接地调用该函数本身, 称为函数的递归(recursive)调

37、用。 C+允许函数的递归调用。例: int f(int x)int y, z;z=f(y); return (2*); 以上是直接调用本函数, 见图4.9。,4.10 函数的递归调用,图4.9 图4.10图4.10表示的是间接调用本函数。在调用f1函数过程中要调用f2函数, 而在调用f2函数过程中又要调用f1函数。,2、递归调用注意防止无终止的自身调用。int f(int x)int y, z;z=f(y); return (2*);可以用if语句来控制, 只有在某一条件成立时才继续执行递归调用, 否则就不再继续。3、包含递归调用的函数称为递归函数。,例4.10 有5个人坐在一起, 问第5个人

38、多少岁?他说比第4个人大两岁。问第4个人岁数, 他说比第3个人大两岁。问第3个人, 又说比第2个人大两岁。问第2个人, 说比第1个人大两岁。最后问第1个人, 他说是10岁。请问第5个人多大? 每一个人的年龄都比其前1个人的年龄大两岁。即 age(5)=age(4)+2 age(4)=age(3)+2 age(3)=age(2)+2 age(2)=age(1)+2 age(1)=10 可以用式子表述如下: age(n)=10 (n=1) age(n)=age(n-1)+2 (n1),可以看到, 当n1时, 求第n个人的年龄的公式是相同的。因此可以用一个函数表示上述关系。图4.11表示求第5个人年

39、龄的过程。图4.11,用age函数实现上述递归过程。 #include using namespace std; int age(int); int main( ) coutage(5)endl;return 0; int age(int n) int c; if(n=1) c=10; else c=age(n-1)+2; return c; ,运行结果如下: 18,函数调用过程如图4.12所示。图4.12,例4.11 用递归方法求!。 求n!可以用递推方法, 即从1开始, 乘2, 再乘3一直乘到n。 求n!也可以用递归方法, 即5!=4!5, 而4!3!4, , 1!=。可用下面的递归公式表

40、示:n!= 1 (n=0, 1)n(n-1)! (n1),#include using namespace std; long fac(int); int main( )int n; long y; coutn; y=fac(n); coutn“!=“yendl; return 0;,long fac(int n) long f;if(n0)cout“n0, data error!“endl; f=-1;else if (n=0|n=1) f=1; else f=fac(n-1)*n; return f; ,运行情况如下: please input an integer:10 10!=3628

41、800,1、局部变量(local variable)定义在一个函数内部定义的变量是局部变量。在复合语句中定义的变量也是局部变量。2、局部变量有效范围函数内部定义的变量只在本函数范围内有效。在复合语句中定义的变量只在本复合语句范围内有效。,4.11 局部变量和全局变量 4.11.1 局部变量(内部变量),float f1(int a) /函数f1 int b, c; b、c有效 a有效 char f2(int x, int y) /函数f2 int i, j; i、j有效 x、y有效 int main( ) /主函数 int m, n; int p, q; p、q在复合语句中有效 m、n有效 ,

42、说明: (1) 主函数main中定义的变量只在主函数中有效。(2) 不同函数中可以使用同名的变量, 它们代表不同的对象, 互不干扰。(3) 可以在一个函数内的复合语句中定义变量, 这些变量只在本复合语句中有效。(这种复合语句也称为分程序或程序块。)(4) 形式参数也是局部变量。,(5) 在函数声明中出现的参数名, 其作用范围只在本行的括号内。 实际上, 编译系统对函数声明中的变量名是忽略的, 即使在调用函数时也没有为它们分配存储单元。 例: int max(int a, int b); /函数声明中出现a、b int max(int x, int y) /函数定义, 形参是x、y coutxy

43、endl; /合法, x、y在函数体中有效coutabendl; /非法, a、b在函数体中无效 编译时认为max函数体中的a和b未经定义。,1、全局变量定义(global variable, 也称全程变量)在函数之外定义的变量是外部变量, 称为全局变量。2、全局变量的有效范围从定义变量的位置开始到本源文件结束。例:,4.11.2 全局变量(外部变量),int p=1, q=5;/全局变量 全局变量p、q的作用范围 float f1(int a)/定义函数f1 int b, c; char c1, c2; /全局变量 char f2 (int x, int y) /定义函数f2 int i,

44、j; 全局变量c1、c2的作用范围 int main ( )/主函数 int m, n; ,3、全局变量的作用增加函数间数据联系的渠道4、建议不在必要时不要使用全局变量。 原因: 全局变量在程序的全部执行过程中都占用存储单元, 而不是仅在需要时才开辟单元。 它使函数的通用性降低。 降低程序的清晰性,5、如果在同一个源文件中, 全局变量与局部变量同名, 则在局部变量的作用范围内, 全局变量被屏蔽, 即它不起作用。 例:int a=3, b=5;int max(int a, int b)int c;c=ab?a:b;return( c ) ;void main( )int a=8; cout“max(a, b)=“(max(a, b)endl;,变量的有效范围称为变量的作用域(scope)。变量有4种不同的作用域:文件作用域(file scope)函数作用域(function scope)块作用域(block scope)函数原型作用域(function prototype scope)。文件作用域是全局的, 其他三者是局部的。除了变量之外, 任何以标识符代表的实体都有作用域, 概念与变量的作用域相似。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报