书签 分享 收藏 举报 版权申诉 / 60
上传文档赚钱

类型青岛理工大学课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4940788
  • 上传时间:2023-01-27
  • 格式:PPT
  • 页数:60
  • 大小:772.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《青岛理工大学课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    青岛 理工大学 课件
    资源描述:

    1、青岛理工大学青岛理工大学第三章 函数本章主要内容本章主要内容3.1 3.1 函数的定义和声明函数的定义和声明3.2 3.2 函数的调用与参数传递函数的调用与参数传递3.3 3.3 内联函数内联函数3.4 3.4 函数重载函数重载3.5 3.5 带默认形参值的函数带默认形参值的函数3.6 3.6 作用域与生存周期作用域与生存周期3.7 3.7 多文件结构多文件结构3.1 3.1 函数的定义与申明函数的定义与申明1 1、函数的定义、函数的定义l无参函数的一般形式无参函数的一般形式类型说明符 函数名()类型说明语句类型说明符 函数名(形式参数表)形式参数类型说明 类型说明 语句l有参函数的一般形式有

    2、参函数的一般形式【例例3-13-1】max max函数的位置示例函数的位置示例#include#include int max(int a,int b)int max(int a,int b)if(ab)return a;if(ab)return a;else return b;else return b;void main()void main()int max(int a,int b);int max(int a,int b);intint x,y,zx,y,z;coutcoutinput two numbers:input two numbers:xy;cinxy;z=max(x,y);

    3、z=max(x,y);coutmaxmum=zendl;coutmaxmum=zendl;3.1 3.1 函数的定义与申明函数的定义与申明2 2、函数的申明、函数的申明l函数声明的语法形式函数声明的语法形式类型标识符类型标识符 函数名(形式参数表)函数名(形式参数表)语句序列语句序列 l形式参数表形式参数表 type name name1 1,type,name name2 2,.,type,.,name namen nl函数的返回值函数的返回值 由由 return return 语句给出;无返回值的函数(语句给出;无返回值的函数(voidvoid类型),类型),不必写不必写returnret

    4、urn语句语句是被初始化的内部变量,寿命和可见性仅限于函数内部若无返回值,写void【例例3-13-1】max max函数的位置示例函数的位置示例#include#include intint max(intmax(int a,inta,int b);b);/函数声明函数声明void main()void main()int max(int a,int b);int max(int a,int b);intint x,y,zx,y,z;coutcoutinput two numbers:input two numbers:xy;cinxy;z=max(x,y);z=max(x,y);coutm

    5、axmum=zendl;coutmaxmum=zb)return a;if(ab)return a;else return b;else return b;【例例3-23-2】实现两个数相加实现两个数相加#include#include intint add(add(intint,intint););/函数原型函数原型void main()void main()intint sum,x,ysum,x,y;coutcout请输入被加数和加数请输入被加数和加数:xy;xy;sum=add(sum=add(x,yx,y);/);/函数调用函数调用coutcoutSum=sumSum=sumendle

    6、ndl;intint add(add(intint a,inta,int b)/b)/函数定义函数定义 return return a+ba+b;运行结果:请输入被加数和加数:213 625Sum=8383.2 3.2 函数的调用与参数传递函数的调用与参数传递1 1、函数的调用、函数的调用l调用形式调用形式 l函数名函数名(实参列表)(实参列表)l函数调用格式函数调用格式l函数表达式函数表达式l函数语句函数语句l函数实参函数实参3.2 3.2 函数的调用与参数传递函数的调用与参数传递2 2、函数调用时的参数传递、函数调用时的参数传递l按值传递按值传递 l形参在没有被调用时,不占用存储空间形参在

    7、没有被调用时,不占用存储空间l调用函数时,应该注意函数的实参与形参类型一致,调用函数时,应该注意函数的实参与形参类型一致,否则会出现错误否则会出现错误lC+C+函数中参数的求值顺序为自右至左函数中参数的求值顺序为自右至左【例例3-33-3】按值传递按值传递#include#include void swap(void swap(int,intint,int););void main()void main()intint a=3,b=4;a=3,b=4;coutcouta=a,b=a=a,b=“b bendlendl;swap(swap(a,ba,b););coutcouta=a,b=a=a,b

    8、=b b endlendl;void swap(int x,int y)void swap(int x,int y)intint t=x;t=x;x=y;x=y;y=t;y=t;运行结果:a=3,b=4a=3,b=4【例例3-43-4】函数参数的传递顺序函数参数的传递顺序#include#include int some_fun(int a,int b)int some_fun(int a,int b)return a+b;return a+b;void main()void main()int x,y;int x,y;x=2;y=3;x=2;y=3;coutsome_fun(+x,x+y)e

    9、ndl;coutsome_fun(+x,x+y)endl;x=2;y=3;x=2;y=3;coutsome_fun(x+y,+x)endl;coutsome_fun(x+y,+x)endl;运行结果:8 93.2 3.2 函数的调用与参数传递函数的调用与参数传递2 2、函数调用时的参数传递、函数调用时的参数传递l地址传递地址传递 【例3-5】地址传递#include iostream.hvoid swap(int*,int*);void main()int a=3,b=4;couta=a,b=“bendl;swap(&a,&b);couta=a,b=“bendl;void swap(int*x

    10、,int*y)int t=*x;*x=*y;*y=t;运行结果:a=3,b=4a=4,b=33.2 3.2 函数的调用与参数传递函数的调用与参数传递2 2、函数调用时的参数传递、函数调用时的参数传递l引用传递引用传递 l数据类型数据类型&引用名引用名=数据类型变量名;数据类型变量名;l引用引用(&)(&)是标识符的别名是标识符的别名;【例例3-6】引用的建立和使用。#include using namespace std;int main()int a=30,b=20;int&refa=a,&refb=b;refa=a+20;b=refb+10;coutrefa“”aendl;coutrefb

    11、 bendl;refa=b;/此时引用refa仍旧是a的别名,只是把b的值给到a。coutrefa“”aendl;return 0;运行结果:50 50 30 3030 30【例例3-73-7】引用传递引用传递#include#include iostream.hiostream.h void swap(void swap(intint&,&,intint&);&);void main()void main()intint a=3,b=4;a=3,b=4;coutcout“a=”a“,b=“a=”a“,b=”bbendlendl;swap(swap(a,ba,b););coutcout“a=”

    12、a“,b=“a=”a“,b=”bbendlendl;void swap(int&x,int&y)void swap(int&x,int&y)intint t=x;t=x;x=y;x=y;y=t;y=t;运行结果:a=3,b=4a=4,b=33.2 3.2 函数的调用与参数传递函数的调用与参数传递3 3、函数的嵌套调用和递归调用函数的嵌套调用和递归调用l函数的嵌套调用函数的嵌套调用 【例3-8】函数的嵌套调用,求三个数中最大数和最小数的差值。#includeusing namespace std;int max(int x,int y,int z)int t;t=xy?x:y;return(tz

    13、?t:z);int min(int x,int y,int z)int t;t=xy?x:y;return(tabc;coutMax-Min=dif(a,b,c)endl;运行结果:5-6 15213.2 3.2 函数的调用与参数传递函数的调用与参数传递3 3、函数的嵌套调用和递归调用函数的嵌套调用和递归调用l函数的递归调用函数的递归调用 图图3-1 直接调用过程示意图直接调用过程示意图图图3-2 间接调用过程示意图间接调用过程示意图3.2 3.2 函数的调用与参数传递函数的调用与参数传递3 3、函数的嵌套调用和递归调用函数的嵌套调用和递归调用l函数的递归调用函数的递归调用l递归函数的一般形式

    14、:递归函数的一般形式:函数类型 递归函数名f(参数x)if(满足结束条件)结果=初值;else 结果=含f(x-1)的表达式;返回结果;【例【例3-93-9】编程计算某个正整数的阶乘编程计算某个正整数的阶乘#include#include long long intint facfac(intint n)n)intint total;total;if(n=1|n=0)total=1;if(n=1|n=0)total=1;else total=fac(n-1)else total=fac(n-1)*n;n;return total;return total;void main()void mai

    15、n()intint n;n;coutcoutplease input a integer:;n;cinn;coutn!is fac(n)endl;coutn!is fac(n)0)if(n0)while(n)while(n)total total*=n;=n;n-;n-;return total;return total;3.3 3.3 内联函数内联函数l声明时使用关键字声明时使用关键字 inlineinline。l编译时在调用处用函数体进行替换编译时在调用处用函数体进行替换,节省了参节省了参数传递、控制转移等开销。数传递、控制转移等开销。l注意:注意:l内联函数体内不能有内联函数体内不能有循

    16、环语句循环语句和和switchswitch语句。语句。l内联函数的定义必须出现在内联函数第一次被调用内联函数的定义必须出现在内联函数第一次被调用之前。之前。l内联函数不能是递归函数内联函数不能是递归函数l语句数尽可能少,一般不超过语句数尽可能少,一般不超过5 5行行【例【例3-123-12】将字符数组】将字符数组str1str1中所有小写字母中所有小写字母(a(az)z)转换成大写字母转换成大写字母#include#include#include#include intint up_letterup_letter(char(char chch););void main()void main()

    17、char char strstr80;80;intint i i;coutcoutplease input a string:;strstr;for(for(i i=0;i=0;istrlenstrlen(strstr););i i+)+)if(if(up_letterup_letter(strstr i i)strstr i i-=32;-=32;coutcoutthe result is:the result is:strstr=a&=a&chch=z)=z)return 1;return 1;else else return 0;return 0;运行结果:Please input a

    18、string:goodMORNING3456The result is:GOODMORNING3456【例【例3-123-12】将字符数组】将字符数组str1str1中所有小写字母中所有小写字母(a(az)z)转换成大写字母转换成大写字母#include#include#include#include inline inline intint up_letterup_letter(char(char chch););void main()void main()char char strstr80;80;intint i i;coutcoutplease input a string:;strs

    19、tr;for(for(i i=0;i=0;istrlenstrlen(strstr););i i+)+)if(if(up_letterup_letter(strstr i i)strstr i i-=32;-=32;coutcoutthe result is:the result is:strstr=a&=a&chch=z)=z)return 1;return 1;else else return 0;return 0;【例例3-133-13】内联函数的应用内联函数的应用#include#include inline int abs(int x)inline int abs(int x)ret

    20、urn x0?-x:x;return x0?-x:x;void main()void main()int a,b=3,c,d=-4;int a,b=3,c,d=-4;a=abs(b);a=abs(b);c=abs(d);c=abs(d);couta=a,c=cendl;couta=a,c=cendl;运行结果:a=3,c=43.4 3.4 函数重载函数重载1 1、函数重载的定义、函数重载的定义l重载是指同一个函数名对应多个函数的现象重载是指同一个函数名对应多个函数的现象形参类型不同形参类型不同int add(int add(intint x,x,intint y);y);float add(f

    21、loat add(floatfloat x,x,floatfloat y);y);形参个数不同形参个数不同int add(int x,int y);int add(int x,int y);int add(int x,int y,int add(int x,int y,intint z z););3.4 3.4 函数重载函数重载2 2、函数重载的绑定、函数重载的绑定l函数重载要求编译器能够唯一地确定调用一个函数时函数重载要求编译器能够唯一地确定调用一个函数时应执行哪个函数代码应执行哪个函数代码l重载函数重载函数add()add()的绑定:的绑定:coutadd(1,2)endl;/coutad

    22、d(1,2)endl;/匹配匹配int add(int,int);int add(int,int);coutadd(1.2,3.4)endl;/coutadd(1.2,3.4)endl;/匹配匹配double add(double,double add(double,double);double);cout add(a,b)endl;/cout add(a,b)endl;/匹配匹配int add(int,int);int add(int,int);【例例3-143-14】求三个操作数之和求三个操作数之和#include#include intint sum(sum(int,int,intint

    23、,int,int););double sum(double,double,double);double sum(double,double,double);void main()void main()coutInt:sum(2,3,4)endl;coutInt:sum(2,3,4)endl;coutDouble:sum(1.4,2.7,3.8)endl;coutDouble:sum(1.4,2.7,3.8)endl;intint sum(sum(intint a,inta,int b,intb,int c)c)return return a+b+ca+b+c;double sum(double

    24、 a,double b,double c)double sum(double a,double b,double c)return return a+b+ca+b+c;运行结果:Int:9Double:7.93.5 3.5 带默认形参值的函数带默认形参值的函数lC+C+语言允许在函数说明或函数定义中为形参预语言允许在函数说明或函数定义中为形参预赋一个默认的值,这样的函数就叫做赋一个默认的值,这样的函数就叫做带有默认带有默认形参值的函数形参值的函数int fun(int x=15,int y=8)int fun(int x=15,int y=8)return x-y;return x-y;voi

    25、d main(void)void main(void)fun(34,22);/fun(34,22);/传递给形参传递给形参x,yx,y的值分别为的值分别为3434和和2222 fun(10);/fun(10);/传递给形参传递给形参x,yx,y的值分别为的值分别为1010和和8 8 fun();/fun();/传递给形参传递给形参x,yx,y的值分别为的值分别为1515和和8 8 3.5 3.5 带默认形参值的函数带默认形参值的函数l特点特点l若函数具有多个形参,则缺省形参值必须自右向左连若函数具有多个形参,则缺省形参值必须自右向左连续定义,并且在一个缺省形参值的右边不能有未指定续定义,并且在

    26、一个缺省形参值的右边不能有未指定缺省值的参数缺省值的参数l在调用一个函数时,如果省去了某个实参,则直到最在调用一个函数时,如果省去了某个实参,则直到最右端的实参都要省去右端的实参都要省去void add_int(int a=1,int b=5,int c=10);/正确的函数声明void add_int(int a,int b=5,int c=10);/正确的函数声明void add_int(int a=1,int b,int c=10);/错误的函数声明void add_int(int a=1,int b,int c)/错误的函数声明假如声明:int fun(int a,float b=5.

    27、0,char c=.,int d=10);采用如下调用形式是错误的:fun(8,4);/语法错误3.5 3.5 带默认形参值的函数带默认形参值的函数l特点特点l缺省形参值的说明必须出现在函数调用之前缺省形参值的说明必须出现在函数调用之前例如:int sub(int x=8,int y=3);/缺省形参值在函数原型中给出void main(void)sub(20,15);/20-15 sub(10);/10-3 sub();/8-3int sub(int x,int y)/缺省形参值没有在函数定义时给出 return x-y;3.5 3.5 带默认形参值的函数带默认形参值的函数l特点特点l在同一

    28、个作用域,一旦定义了缺省形参值,就不能再在同一个作用域,一旦定义了缺省形参值,就不能再定义它定义它l如果几个函数说明出现在不同的作用域内,则允许分如果几个函数说明出现在不同的作用域内,则允许分别为它们提供不同的缺省形参值别为它们提供不同的缺省形参值int fun(int a,float b,char,int d=10);int fun(int a,float b,char c=.,int d=10);/错误:企图再次定义缺省参数c和dint fun(int a=6,float b=5.0,char c=.,int d=10);void main(void)int fun(int a=3,flo

    29、at b=2.0,char c=n,int d=20);coutfun()endl;/fun函数使用局部缺省参数值 3.5 3.5 带默认形参值的函数带默认形参值的函数l特点特点l对形参缺省值的指定可以是初始化表达式,甚至可以包对形参缺省值的指定可以是初始化表达式,甚至可以包含函数调用含函数调用l在函数原型中给出了形参的缺省值时,形参名可以省略在函数原型中给出了形参的缺省值时,形参名可以省略l形参的默认值可以是全局常量、全局变量、表达式、函形参的默认值可以是全局常量、全局变量、表达式、函数调用,但不能为局部变量数调用,但不能为局部变量/d参数的缺省值是函数调用int fun(int a,flo

    30、at b=5.0,char c=.,int d=sub(20,15);int fun(int,float=5.0,char=.,int=sub(20,15);/下例不合法:void fun()int k;void g(int x=k);/k为局部变量3.6 3.6 作用域与生存周期作用域与生存周期1 1、标识符的作用域、标识符的作用域l局部作用域(块作用域)局部作用域(块作用域)l函数作用域函数作用域l函数原型作用域函数原型作用域l文件作用域文件作用域 l名字空间作用域名字空间作用域表表3-1 四种作用域的作用范围四种作用域的作用范围作用域 作 用 范 围 块作用域 从块内标识符定义开始,到块

    31、结束处为止 函数作用域 从函数内标识符定义开始,到函数结束为止 函数原型作用域 从标识符定义开始,到函数原型声明结束 文件作用域 从标识符定义开始,到整个源文件结束(可用 extern 进行扩展)【例例3-153-15】块作用域示例块作用域示例#include#include using namespace std;using namespace std;intint main()main()/1/1 intint i i,j;,j;/2/2 i i=1;j=2;=1;j=2;/3/3 intint a,b;a,b;/4/4 a=5;a=5;/5/5 b=j;b=j;/6/6 cout a t

    32、 b endl;/7 cout a t b endl;/7 /8/8 cout i “t”j endl;cout i “t”j endl;/9/9 return 0;return 0;/10/10/11/11【例例3-163-16】块作用域示例块作用域示例#include#include using namespace std;using namespace std;int main()int main()/1/1 /2/2 int x(3),y(5);int x(3),y(5);/3/3 for(;x 0;x-)for(;x 0;x-)/4/4 /5/5 int x(4);int x(4);

    33、/6/6 cout x t y endl;cout x t y endl;/7/7 /8/8 cout endl x t y endl;/9 cout endl x t y endl;/9 return 0;return 0;/10/10 /11/11运行结果:45454505【例例3-173-17】文件作用域示例文件作用域示例#include#include using namespace std;using namespace std;intint i i;/全局变量,文件作用域全局变量,文件作用域intint main()main()i i=5;=5;intint i i;/局部变量,块

    34、作用局部变量,块作用域域 i i=7;=7;coutcout i i=i i endlendl;/输出输出 coutcout “i i=”=”i i endlendl;/输出输出 return 0;return 0;3.6 3.6 作用域与生存周期作用域与生存周期2 2、局部变量和全局变量、局部变量和全局变量l局部变量局部变量l在一个函数内部说明的变量是内部变量,局部变量是在一个函数内部说明的变量是内部变量,局部变量是在函数内作定义说明的,它只在该函数范围内有效在函数内作定义说明的,它只在该函数范围内有效l全局变量全局变量l全局变量也称为外部变量,它是在函数外部定义的变全局变量也称为外部变量,

    35、它是在函数外部定义的变量量【例例3-193-19】使用局部变量示例使用局部变量示例#include#include intint f1(f1(intint a)/a)/*函数函数f1f1*/intint b,cb,c;/a,b,ca,b,c作用域作用域intint f2(f2(intint x)/x)/*函数函数f2f2*/int y,z;int y,z;/x,y,z /x,y,z作用域作用域void main()void main()int m,n;int m,n;l主函数中定义的变量也只能在主函主函数中定义的变量也只能在主函数中使用,不能在其他函数中使用。数中使用,不能在其他函数中使用。l

    36、形参变量是属于被调函数的局部变形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局量,实参变量是属于主调函数的局部变量。部变量。l允许在不同的函数中使用相同的变允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发不同的单元,互不干扰,也不会发生混淆。生混淆。l在复合语句中也可定义变量,其作在复合语句中也可定义变量,其作用域只在复合语句范围内。用域只在复合语句范围内。【例例3-223-22】全局变量与局部变量使用示例全局变量与局部变量使用示例#include#include using namespace std;usi

    37、ng namespace std;int vs(int l,int w)int vs(int l,int w)extern int h;extern int h;int v;/int v;/定义局部变量定义局部变量v v v=l v=l*w w*h;/h;/引用全局变量引用全局变量w w、h h和局部变量和局部变量v v、l l extern v;extern v;void main()void main()extern int w,h;extern int w,h;int l=5;int l=5;/定义局部变量定义局部变量l l coutvs(l,w);coutvs(l,w);int l=3

    38、,w=4,h=5;/int l=3,w=4,h=5;/定义全局变量定义全局变量l l、w w、h h3.6 3.6 作用域与生存周期作用域与生存周期3 3、动态变量和静态变量、动态变量和静态变量l变量在内存中的存储变量在内存中的存储l一个程序将操作系统分配给其运行的内存块分为一个程序将操作系统分配给其运行的内存块分为4 4个个区域:代码区、全局数据区、栈区、堆区区域:代码区、全局数据区、栈区、堆区l动态变量动态变量l用来在程序执行过程中,定义变量或调用函数时分配用来在程序执行过程中,定义变量或调用函数时分配存储空间存储空间l静态变量静态变量l在程序开始执行时就分配存储空间,在程序运行期间在程序

    39、开始执行时就分配存储空间,在程序运行期间一直占用,运行结束时释放一直占用,运行结束时释放3.6 3.6 作用域与生存周期作用域与生存周期4 4、变量的存储类型、变量的存储类型l所谓存储类型,是指变量占用内存空间的方所谓存储类型,是指变量占用内存空间的方式,式,也称为存储方式也称为存储方式l变量的存储方式可分为静态存储和动态存储两种变量的存储方式可分为静态存储和动态存储两种l对变量的存储类型说明对变量的存储类型说明l格式格式auto:自动变量。register:寄存器变量。extern:外部变量。static:静态变量存储类型说明符 数据类型说明符 变量名,变量名,;3.6 3.6 作用域与生存

    40、周期作用域与生存周期5 5、变量的存储类型、变量的存储类型l外部类型外部类型l用关键字用关键字externextern声明的变量称为外部变量声明的变量称为外部变量l外部变量是全局变量,具有文件作用域外部变量是全局变量,具有文件作用域l用用externextern声明外部变量的目的有两个声明外部变量的目的有两个l扩展当前文件中全局变量的作用域;扩展当前文件中全局变量的作用域;l其他文件中全局变量的作用域扩展到当前文件中其他文件中全局变量的作用域扩展到当前文件中【例例3-253-25】求两个整数的最大值求两个整数的最大值#include#include using namespace std;us

    41、ing namespace std;extern extern intint a,b;a,b;/第第3 3行声明行声明a a、b b为外部变量为外部变量intint main()main()intint c;c;int max(int x,int y);int max(int x,int y);c=max(a,b);c=max(a,b);/第第7 7行使用全局变量行使用全局变量a a、b b cout max=c endl;cout max=c y?x:y;z=x y?x:y;return z;return z;3.6 3.6 作用域与生存周期作用域与生存周期6 6、变量的存储类型、变量的存储

    42、类型l静态类型静态类型l静态变量的类型说明符是静态变量的类型说明符是staticstaticl静态变量属于静态存储方式静态变量属于静态存储方式,但是属于静态存储方式但是属于静态存储方式的量不一定就是静态变量的量不一定就是静态变量l静态变量根据定义在函数内还是函数外,分为静态局静态变量根据定义在函数内还是函数外,分为静态局部变量与静态全局变量。部变量与静态全局变量。【例例3-263-26】静态局部变量使用示例静态局部变量使用示例#include#include using namespace std;using namespace std;void main()void main()intint

    43、 i i;void f();/void f();/*函数说明函数说明*/for(for(i i=1;i=5;i+)=1;i=5;i+)f();/f();/*函数调用函数调用*/void f()/void f()/*函数定义函数定义*/auto auto intint j=0;j=0;+j;+j;coutcoutj;j;【例例3-273-27】静态全局变量使用示例静态全局变量使用示例#include#include using namespace std;using namespace std;void fn();void fn();static static intint n;/n;/定义静态

    44、全局变量定义静态全局变量intint main()main()n=20;n=20;coutcout n n endlendl;fn();fn();return 0;return 0;void fn()void fn()n+;n+;coutcout n n endlendl;3.6 3.6 作用域与生存周期作用域与生存周期7 7、生存期、生存期l静态生存期静态生存期l这种生命期与程序的运行期相同,只要程序一开始运这种生命期与程序的运行期相同,只要程序一开始运行,这种生命期的变量就存在,当程序结束时,其生行,这种生命期的变量就存在,当程序结束时,其生命期就结束命期就结束l局部生存期局部生存期l在函

    45、数内部声明的变量或者块中声明的变量具有局部在函数内部声明的变量或者块中声明的变量具有局部生命期生命期l动态生存期动态生存期l用用newnew声明获得动态存储空间,在堆中分配某一类型声明获得动态存储空间,在堆中分配某一类型变量所占的存储空间,并将首地址赋给指针变量所占的存储空间,并将首地址赋给指针课堂测试课堂测试1 1、#include#includeusing namespace std;using namespace std;void fun();void fun();void main()void main()fun();fun();fun();fun();void fun()void f

    46、un()staticstatic int int a a=1;=1;int int i i=5;=5;a a+;+;i i+;+;couti=couti=i i,a=,a=a aendl;endl;#include#includeusing namespace std;using namespace std;int i=1;/int i=1;/void main(void)void main(void)static int a;/static int a;/int b=-10;/int b=-10;/int c=0;int c=0;void other(void);void other(voi

    47、d);cout-MAIN-n;cout-MAIN-n;cout i:i a:a b:b c:cout i:i a:a b:b c:cendl;cendl;c=c+8;other();c=c+8;other();cout-MAIN-n;cout-MAIN-n;cout i:i a:a b:b c:cout i:i a:a b:b c:cendl;cendl;i=i+10;other();i=i+10;other();2.课堂测试课堂测试void other(void)void other(void)static int a=2;static int a=2;static int b;static

    48、 int b;int c=10;int c=10;a=a+2;i=i+32;c=c+5;a=a+2;i=i+32;c=c+5;cout-OTHER-n;cout-OTHER-n;cout i:i a:a b:b c:cout i:i a:a b:b c:cendl;cendl;b=a;b=a;-MAIN-i:1 a:0 b:-10 c:0-OTHER-i:33 a:4 b:0 c:15-MAIN-i:33 a:0 b:-10 c:8-OTHER-i:75 a:6 b:4 c:15运行结果:运行结果:3.6 3.6 作用域与生存周期作用域与生存周期8 8、名字空间、名字空间l一个命名空间将不同的

    49、标识符集合在一个命名一个命名空间将不同的标识符集合在一个命名作用域(作用域(named scopenamed scope)内)内l为了解决命名冲突为了解决命名冲突l例如,声明一个命名空间例如,声明一个命名空间NSNS:namspace NS namspace NS class File;class File;void Fun();void Fun();l则引用标识符的方式如下,则引用标识符的方式如下,NS:File obj;NS:File obj;NS:Fun();NS:Fun();l没有声明命名空间的标识符都处于无名的命名没有声明命名空间的标识符都处于无名的命名空间中空间中【例例3-283-

    50、28】使用使用stdstd名字空间名字空间#include#include int main()int main()std:std:coutComing to you from cout.endl;coutComing to you from cout.endl;return 0;return 0;#include#include using namespace std;using namespace std;int main()int main()coutComing to you from coutComing to you from cout.endl;cout.endl;return

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:青岛理工大学课件.ppt
    链接地址:https://www.163wenku.com/p-4940788.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库