《C语言程序设计第4章函数与编译预处理.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第4章函数与编译预处理.ppt(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第4章 函数与编译预处理C C 语言程序设计语言程序设计1第2页琼琼 州州 学学 院院第4章 函数与编译预处理 4.1 4.1 函数概述函数概述函数概述函数概述4.2 4.2 函数定义与调用函数定义与调用函数定义与调用函数定义与调用4.3 4.3 局部变量和全局变量局部变量和全局变量局部变量和全局变量局部变量和全局变量4.4 4.4 变量的生存期和存储类别变量的生存期和存储类别变量的生存期和存储类别变量的生存期和存储类别4.54.5 编译预处理编译预处理编译预处理编译预处理2005年1月2第3页琼琼 州州 学学 院院4.1 函数概述C程序程序源程序文件源程序文件n函数函数1函数函数m 源程序文
2、件源程序文件1函数函数1函数函数n4.1.1 函数简介2005年1月3第4页琼琼 州州 学学 院院【例】#include#include void print_line()/*void print_line()/*函数定义函数定义*/printf(*n);printf(*n);void print_text()/*void print_text()/*函数定义函数定义*/printf(Welcome to Beijing n);printf(Welcome to Beijing n);void main()void main()print_line();/*print_line();/*函数调
3、用函数调用*/*/print_text();/*print_text();/*函数调用函数调用*/*/print_line();/*print_line();/*函数调用函数调用*/*/程序的执行总是程序的执行总是从从main函数开始函数开始2005年1月4第5页琼琼 州州 学学 院院void mainvoid main函数函数函数函数 调用函数调用函数调用函数调用函数 print_line();函数函数函数函数 print_line()print_line()2005年1月5第6页琼琼 州州 学学 院院 一个一个C源程序可以由一个或多个源程序文件组源程序可以由一个或多个源程序文件组成。成。C
4、编译系统在对编译系统在对C源程序进行编译时是以文件源程序进行编译时是以文件为单位进行的。为单位进行的。一个一个C源程序文件可以由一个或多个函数组成。源程序文件可以由一个或多个函数组成。所有函数都是独立的。主函数可以调用其它函数,所有函数都是独立的。主函数可以调用其它函数,其它函数可以相互调用。其它函数可以相互调用。在一个在一个C程序中,有且仅有一个主函数程序中,有且仅有一个主函数main。C程序的执行总是从程序的执行总是从main函数开始,调用其它函数函数开始,调用其它函数后最终回到后最终回到main函数,在函数,在main函数中结束整个程序函数中结束整个程序的运行。的运行。说明说明2005年
5、1月6第7页琼琼 州州 学学 院院 函数的种类从使用的角度看:从使用的角度看:从使用的角度看:从使用的角度看:标准函数(库函数)标准函数(库函数)标准函数(库函数)标准函数(库函数)库函数是由系统提供的。如:库函数是由系统提供的。如:库函数是由系统提供的。如:库函数是由系统提供的。如:getchar()getchar()、sin(x)sin(x)等。在程序中可以直接调用它们。附录等。在程序中可以直接调用它们。附录等。在程序中可以直接调用它们。附录等。在程序中可以直接调用它们。附录B B列出列出列出列出了了了了C C的部分库函数。的部分库函数。的部分库函数。的部分库函数。用户自定义函数。如用户自
6、定义函数。如用户自定义函数。如用户自定义函数。如:例中的例中的例中的例中的print_line()print_line()函数。函数。函数。函数。2005年1月7第8页琼琼 州州 学学 院院l l由由C C编编译译系系统统定定义义的的一一种种函函数数,存存放放在在系系统统函函数数库中,用户可以根据需要随时调用库中,用户可以根据需要随时调用l l常用函数常用函数如:fabs、sqrt、sin、pow、rand(常用数学函数参见教材P100 表4-1和附录B)l l函数调用形式:函数调用形式:函数名(参数表)例如:sqrt(x)4.1.2 数学库函数数学库函数2023/1/168第9页琼琼 州州
7、学学 院院例#include#include#include#include void main()void main()float x=4.5;float x=4.5;printf(%f,%f,%fn,sqrt(x),pow(x,2),fabs(-x);printf(%f,%f,%fn,sqrt(x),pow(x,2),fabs(-x);输出结果:输出结果:2.121320,20.250000,4.5000002023/1/169第10页琼琼 州州 学学 院院4.2.1 函数的定义函数定义的一般形式函数定义的一般形式函数类型函数类型 函数名函数名(类型名类型名 形式参数形式参数1,)说明语句
8、说明语句 执行语句执行语句 例如:求两个数的最大值。例如:求两个数的最大值。int max(int x,int y)int z;z=x y?x:y;return(z);4.2 函数定义及调用函数定义及调用2005年1月10第11页琼琼 州州 学学 院院#include#includeint int cubecube(int y);(int y);/*/*函数原型声明函数原型声明*/void void mainmain()()int x,last,nowcb;int x,last,nowcb;last=1;last=1;printf(15 printf(15之间,相邻两数的立方差是:之间,相邻两
9、数的立方差是:n);n);for(x=2;x=5;x+)for(x=2;xmax)max=iabs(a);/*函数调用构成表达式函数调用构成表达式*/m=max(c,max(a,b);/*函数调用作为函数参数函数调用作为函数参数*/4.2.2 函数的调用函数的调用函数调用的一般形式:函数调用的一般形式:2005年1月12第13页琼琼 州州 学学 院院void swap(int x,int y)int z;z=x;x=y;y=z;printf(nx=%d,y=%d,x,y);main()int a=10,b=20;swap(a,b);printf(na=%d,b=%dn,a,b);4.2.3 函
10、数参数传递与返回值1函数的参数传递(值传递)函数的参数传递(值传递)程序输出结果:程序输出结果:x=20,y=10a=10,b=20形式参数(形参)形式参数(形参)实际参数(实参)实际参数(实参)【例例】编一程序,将主函数中的两个变量的值传递给编一程序,将主函数中的两个变量的值传递给swap函函数中的两个形参,交换两个形参的值。数中的两个形参,交换两个形参的值。单向值传递单向值传递2005年1月13第14页琼琼 州州 学学 院院有关形参和实参的说明:当函数被调用时才给形参分配内存单元。调用结当函数被调用时才给形参分配内存单元。调用结束,所占内存被释放。束,所占内存被释放。实参可以是常量、变量或
11、表达式,但要求它们有实参可以是常量、变量或表达式,但要求它们有确定的值。确定的值。实参与形参类型要一致,字符型与整型兼容。实参与形参类型要一致,字符型与整型兼容。实参与形参的个数必须相等。在函数调用时,实实参与形参的个数必须相等。在函数调用时,实参的值赋给与之相对应的形参。参的值赋给与之相对应的形参。“单向值传递单向值传递”。2023/1/1614第15页琼琼 州州 学学 院院函数的返回值是通过函数的返回值是通过returnreturn语句带回到主调函数的语句带回到主调函数的功能:功能:终止函数的运行,返回主调函数,若有返回值,终止函数的运行,返回主调函数,若有返回值,将返回值带回主调函数。将
12、返回值带回主调函数。说明:说明:说明:说明:若函数没有返回值,若函数没有返回值,若函数没有返回值,若函数没有返回值,returnreturn语句可以省略。语句可以省略。语句可以省略。语句可以省略。returnreturn语句中的表达式类型一般应和函数的类型一致,语句中的表达式类型一般应和函数的类型一致,语句中的表达式类型一般应和函数的类型一致,语句中的表达式类型一般应和函数的类型一致,如果不一致,系统自动将表达式类型转换为函数类型。如果不一致,系统自动将表达式类型转换为函数类型。如果不一致,系统自动将表达式类型转换为函数类型。如果不一致,系统自动将表达式类型转换为函数类型。2.函数的返回值函数
13、的返回值return return 语句格式:语句格式:语句格式:语句格式:return;return;或或或或 return return 表达式表达式表达式表达式 ;2005年1月15第16页琼琼 州州 学学 院院【例】计算并输出圆的面积。#include#include s(int r)s(int r)return 3.14*r*r;return 3.14*r*r;void main()void main()int r;int r;scanf(%d,&r);scanf(%d,&r);printf(%dn,s(r);printf(%dn,s(r);自动转换自动转换自动转换自动转换为为为为i
14、ntintintint型型型型 程序运行情况如下:程序运行情况如下:2 12说明:说明:函数的类型决定了函数返回值的类型。若省略函数的类型,函数的类型决定了函数返回值的类型。若省略函数的类型,系统默认其为系统默认其为int型。型。无返回值的函数应将其类型定义为无返回值的函数应将其类型定义为void(空)类型。(空)类型。2005年1月16第17页琼琼 州州 学学 院院【例4-8】编写函数实现两组变量的显示 定义定义2组,共组,共8个整型变量个整型变量a1a4,b1b4,要求:输入字符,要求:输入字符a和整数和整数1,显,显示示a1变量的值,输入字符变量的值,输入字符b和整数和整数1,显示,显示
15、b1变量的值变量的值2023/1/1617第18页琼琼 州州 学学 院院#include#include int ArrayOperating(int i,char ch)int ArrayOperating(int i,char ch)int a1=1,a2=0,a3=3,a4=5;int a1=1,a2=0,a3=3,a4=5;int b1=2,b2=0,b3=4,b4=3;int b1=2,b2=0,b3=4,b4=3;switch(i)switch(i)case 1:case 1:switch(ch)switch(ch)case a:return a1;case a:return a1
16、;case b:return b1;case b:return b1;case 2:case 2:case 3:case 3:case 4:case 4:void main()void main()int i;char ch;int i;char ch;printf(printf(输入显示的变量,形输入显示的变量,形式如:式如:a1a1或或b4b4:););scanf(%c%d,&ch,&i);scanf(%c%d,&ch,&i);printf(%c%d=%dn,ch,printf(%c%d=%dn,ch,i,ArrayOperating(i,ch);i,ArrayOperating(i,ch
17、);2023/1/1618第19页琼琼 州州 学学 院院4.2.4 函数的嵌套调用mainmain函数函数函数函数 调用函数调用函数调用函数调用函数 A A;函数函数函数函数 A A 调用函数调用函数调用函数调用函数 B B;函数函数函数函数 B B 2005年1月19第20页琼琼 州州 学学 院院【例】函数的嵌套调用main()main()int n=3;int n=3;printf(%dn,printf(%dn,sub1(n);sub1(n);sub1(int n)sub1(int n)int i,a=0;int i,a=0;for(i=n;i0;i-)for(i=n;i0;i-)a+=s
18、ub2(i);a+=sub2(i);return a;return a;sub2(int n)sub2(int n)return n+1;return n+1;程序输出结果:程序输出结果:9 2005年1月20第21页琼琼 州州 学学 院院 4.2.5 对被调函数的声明和函数原型对被调函数的声明和函数原型变量要变量要变量要变量要先定义后使用先定义后使用先定义后使用先定义后使用,函,函,函,函数也如此数也如此数也如此数也如此。即。即。即。即被调函数的定义要被调函数的定义要被调函数的定义要被调函数的定义要出现在主调函数的定义之前出现在主调函数的定义之前出现在主调函数的定义之前出现在主调函数的定义之
19、前。如。如。如。如swapswapswapswap函数函数函数函数.void swap(int x,int y)main()swap(a,b);main()main()c=max(a,b);c=max(a,b);max(int x,int y)max(int x,int y)允许整型函数(且允许整型函数(且允许整型函数(且允许整型函数(且参数也是整型)的定义参数也是整型)的定义参数也是整型)的定义参数也是整型)的定义出现在主调函数之后。出现在主调函数之后。出现在主调函数之后。出现在主调函数之后。如如如如maxmaxmaxmax函数函数函数函数.2005年1月21第22页琼琼 州州 学学 院院对
20、被调函数进行声明的一般形式对被调函数进行声明的一般形式 函数类型函数类型 函数名(函数名(参数类型参数类型1 1 参数名参数名1 1,);或或 函数类型函数类型 函数名(函数名(参数类型参数类型1 1,参数类型参数类型2 2,);第二种形式省略了参数名,此种形式也称为第二种形式省略了参数名,此种形式也称为函数的原型函数的原型。如果非整型函数在主调函数之后定义,如果非整型函数在主调函数之后定义,则应在主调函数中或主调函数之前对被则应在主调函数中或主调函数之前对被调函数进行声明。调函数进行声明。2005年1月22第23页琼琼 州州 学学 院院#include void main()float ca
21、lc(float x,float y,char opr);float a,b;char opr;printf(n输入四则运算表达式输入四则运算表达式:);scanf(%f%c%f,&a,&opr,&b);if(opr=+|opr=-|opr=*|opr=/)printf(%5.2f%c%5.2f=%6.2fn,a,opr,b,calc(a,b,opr);else printf(非法运算符非法运算符!n);float calc(float x,float y,char opr)switch(opr)case+:return(x+y);case -:return(x-y);case *:retur
22、n(x*y);case /:return(x/y);对被调函对被调函数的声明数的声明【例例4-124-12】计算并输出两个数的和、差、积、商。计算并输出两个数的和、差、积、商。2005年1月23第24页琼琼 州州 学学 院院4.3 局部变量和全局变量变量的作用域变量的作用域变量的作用域变量的作用域:变量在程序中可以被使用的范围。:变量在程序中可以被使用的范围。根据变量的作用域可以将变量分为根据变量的作用域可以将变量分为局部变量和全局局部变量和全局变量变量。局部变量局部变量局部变量局部变量(内部变量内部变量内部变量内部变量):在函数内或复合语句:在函数内或复合语句内内定定义的变量以及义的变量以及
23、形参形参形参形参。作用域作用域作用域作用域:函数内或复合语句内函数内或复合语句内。4.3.1 局部作用域和局部变量局部作用域和局部变量【例例】分析下面程序的运行结果及变量的作用域。分析下面程序的运行结果及变量的作用域。2005年1月24第25页琼琼 州州 学学 院院void sub(int void sub(int a a,int,int b b)int int c c;a=a+b;b=b+a;c=b-a;a=a+b;b=b+a;c=b-a;printf(sub:ta=%d b=%d c=%dn,a,b,c);printf(sub:ta=%d b=%d c=%dn,a,b,c);局部变量局部变
24、量局部变量局部变量void main()int a=1,b=1,c=1;printf(main:ta=%d b=%d c=%dn,a,b,c);sub(a,b);printf(main:ta=%d b=%d c=%dn,a,b,c);int a=2,b=2;printf(comp:ta=%d b=%d c=%dn,a,b,c);printf(main:ta=%d b=%d c=%dn,a,b,c);局部变量局部变量局部变量局部变量局部变量局部变量局部变量局部变量“分分程程序序”或或“程程序序块块”程序输出结果:程序输出结果:main:a=1 b=1 c=1sub:a=2 b=3 c=1main
25、:a=1 b=1 c=1comp:a=2 b=2 c=1main:a=1 b=1 c=12005年1月25第26页琼琼 州州 学学 院院4.3.2 全局作用域和全局变量全局变量全局变量全局变量全局变量(外部变量外部变量外部变量外部变量):在):在函数外部函数外部定义的变量。定义的变量。作用域作用域作用域作用域:从定义变量的位置开始到本源文件结束从定义变量的位置开始到本源文件结束从定义变量的位置开始到本源文件结束从定义变量的位置开始到本源文件结束。如在其作用域内的函数或分程序中定义了同名局部如在其作用域内的函数或分程序中定义了同名局部如在其作用域内的函数或分程序中定义了同名局部如在其作用域内的函
26、数或分程序中定义了同名局部变量,则在局部变量的作用域内,同名全局变量暂变量,则在局部变量的作用域内,同名全局变量暂变量,则在局部变量的作用域内,同名全局变量暂变量,则在局部变量的作用域内,同名全局变量暂时不起作用时不起作用时不起作用时不起作用。【例例】全局变量和局部变量的作用域。全局变量和局部变量的作用域。2005年1月26第27页琼琼 州州 学学 院院int int a a=5;=5;void f(int void f(int x x,int,int y y)int int b,cb,c;b=a+x;b=a+x;c=a-y;c=a-y;printf(%dt%dt%dn,a,b,c);prin
27、tf(%dt%dt%dn,a,b,c);局部变量局部变量局部变量局部变量main()int b=6,c=7;f(b,c);printf(%dt%dt%dn,a,b,c);int a=9,b=8;printf(%dt%dt%dn,a,b,c);c c=10;=10;printf(%dt%dt%dn,a,b,c);printf(%dt%dt%dn,a,b,c);printf(%dt%dt%dn,a,b,c);printf(%dt%dt%dn,a,b,c);局部变量局部变量局部变量局部变量局部变量局部变量局部变量局部变量程序输出结果:程序输出结果:5 11 -25 6 79 8 79 8 109 8
28、 105 6 10全局变量全局变量“分分程程序序”或或“程程序序块块”int2005年1月27第28页琼琼 州州 学学 院院4.4 变量的生存期和存储类别4.4.1 变量的生存期变量的生存期变量的生存期变量的生存期:变量在内存中占据存储空间的时间。:变量在内存中占据存储空间的时间。程序代码区静态存储区动态存储区存储分配存储分配动态存储变量动态存储变量静态存储变量静态存储变量2005年1月28第29页琼琼 州州 学学 院院4.4.2 变量的存储类别变量的属性数据类型:数据类型:数据类型:数据类型:决定为变量分配内存单元的长度,决定为变量分配内存单元的长度,决定为变量分配内存单元的长度,决定为变量
29、分配内存单元的长度,数据的存放形式,数据的存放形式,数据的存放形式,数据的存放形式,数的范围。数的范围。数的范围。数的范围。存储类别:存储类别:存储类别:存储类别:决定了变量的生存期,决定了变量的生存期,决定了变量的生存期,决定了变量的生存期,给它分配在哪个存储区。给它分配在哪个存储区。给它分配在哪个存储区。给它分配在哪个存储区。2005年1月29第30页琼琼 州州 学学 院院变量定义语句的一般形式存储类别存储类别存储类别存储类别 数据类型数据类型数据类型数据类型 变量名变量名变量名变量名1,1,变量名变量名变量名变量名n;n;autoauto(自动的)(自动的)(自动的)(自动的)regis
30、terregister(寄存器的)(寄存器的)(寄存器的)(寄存器的)staticstatic(静态的)(静态的)(静态的)(静态的)externextern(外部的)(外部的)(外部的)(外部的)2005年1月30第31页琼琼 州州 学学 院院1自动变量(自动变量(auto类别)类别)main()int x,y;main()auto int x,y;自动变量自动变量自动变量自动变量等价等价可省局部变量可以定义为自动变量。局部变量可以定义为自动变量。2005年1月31第32页琼琼 州州 学学 院院main()int a,b,c;printf(“Enter a,b:n”);scanf(“%d%d
31、”,&a,&b);c=sum(a,b);printf(“Sum=%dn”,c);sum(int a,int b)int c=0;c=a+b;return(c);printf(“Enter a,b:n”);scanf(“%d%d”,&a,&b);c=sum(a,b);c=a+b;return(c);printf(“Sum=%dn”,c);main()Enter a,b:内存用户区内存用户区静态静态存储区存储区am 不定不定bm 不定不定cm 不定不定1 2 as=1bs=2cs=0bm=2am=1sum(int a,int b)Sum=3程程 序序程序区程序区动态动态存储区存储区观察下列程序运行
32、时变量的存储情况观察下列程序运行时变量的存储情况单击开始运行as=1bs=2cs=3运行结束cm=3 2005年1月32第33页琼琼 州州 学学 院院 内存分配内存分配调用函数或执行分程序时在调用函数或执行分程序时在动态存储区动态存储区为其分配存储单元,为其分配存储单元,函数或分程序执行结束,所占内存空间即刻释放。函数或分程序执行结束,所占内存空间即刻释放。变量的初值变量的初值定义变量时若没赋初值,变量的定义变量时若没赋初值,变量的初值不确定初值不确定;如果赋初值则;如果赋初值则每次函数被调用时执行一次赋值操作。每次函数被调用时执行一次赋值操作。生存期生存期 在函数或分程序执行期间。在函数或分
33、程序执行期间。作用域作用域自动变量所在的函数内或分程序内。自动变量所在的函数内或分程序内。自动变量自动变量2005年1月33第34页琼琼 州州 学学 院院2静态变量(static类别)除形参外,局部变量和全局变量都可以定义为静态变量。除形参外,局部变量和全局变量都可以定义为静态变量。static int a;main()float x,y;f()static int b=1;全局静态变量全局静态变量局部静态变量局部静态变量局部静态变量局部静态变量自动变量自动变量自动变量自动变量不能省2005年1月34第35页琼琼 州州 学学 院院 内存分配内存分配编译时,将其分配在内存的静态存储区中,程序运行
34、结束编译时,将其分配在内存的静态存储区中,程序运行结束释放该单元。释放该单元。静态变量的初值静态变量的初值若定义时未赋初值,在编译时,系统自动赋初值为若定义时未赋初值,在编译时,系统自动赋初值为0 0;若定;若定义时赋初值,则仅在编译时赋初值一次,程序运行后不再义时赋初值,则仅在编译时赋初值一次,程序运行后不再给变量赋初值给变量赋初值 。生存期生存期整个程序的执行期间。整个程序的执行期间。作用域作用域局部静态变量的作用域是它所在的函数或分程序。全局静局部静态变量的作用域是它所在的函数或分程序。全局静态变量的作用域是从定义处开始到本源文件结束。态变量的作用域是从定义处开始到本源文件结束。静态变量
35、静态变量2005年1月35第36页琼琼 州州 学学 院院static int b=0;static int b=0;main()main()int inta=2,i;a=2,i;for(i=0;i2;i+)for(i=0;i2;i+)printf(%4d,f(a);printf(%4d,f(a);printf(n);printf(n);int f(int a)int f(int a)static int c=3;static int c=3;b+;c+;b+;c+;return(a+b+c);return(a+b+c);【例例】静态变量的使用。静态变量的使用。main()main()for(i
36、=0;i2;i+)for(i=0;i2;i+)printf(%4d,f(a);printf(%4d,f(a);int f(int a)int f(int a)b+;c+;b+;c+;return(a+b+c);return(a+b+c);for(i=0;i2;i+)for(i=0;i2;i+)printf(%4d,f(a);printf(%4d,f(a);int f(int a)int f(int a)b+;c+;b+;c+;return(a+b+c);return(a+b+c);printf(n);printf(n);for(i=0;i2;i+)for(i=0;i2;i+)2005年1月36
37、第37页琼琼 州州 学学 院院int c;static int a;main()float x,yx,y;char s;f()static int b=1;3.外部变量(extern类别)在函数外定义的变量若没有用在函数外定义的变量若没有用 staticstatic说明,则是外部变量。外说明,则是外部变量。外部变量只能隐式定义为部变量只能隐式定义为externextern类别,不能显式定义。类别,不能显式定义。全局静态变量全局静态变量自动变量自动变量自动变量自动变量局部静态变量局部静态变量局部静态变量局部静态变量外部变量外部变量2005年1月37第38页琼琼 州州 学学 院院外部变量声明的一般
38、格式 externextern 数据类型数据类型数据类型数据类型 变量名变量名变量名变量名1 1,变量名,变量名,变量名,变量名n n;或或或或 externextern 变量名变量名变量名变量名1 1,变量名,变量名,变量名,变量名n n;注意:注意:外部变量声明用关键字外部变量声明用关键字externextern,而外部变量的,而外部变量的定义不能用定义不能用externextern,只能隐式定义。,只能隐式定义。定义外部变量时,系统要给变量分配存储空间,定义外部变量时,系统要给变量分配存储空间,而对外部变量声明时,系统不分配存储空间,而对外部变量声明时,系统不分配存储空间,只是让编译系统
39、知道该变量是一个已经定义过只是让编译系统知道该变量是一个已经定义过的外部变量,与函数声明的作用类似。的外部变量,与函数声明的作用类似。2005年1月38第39页琼琼 州州 学学 院院int p=1,q=5;int p=1,q=5;float f1(int a)float f1(int a)extern char c1,c2;extern char c1,c2;char c1,c2;char c1,c2;char f2(int x,int y)char f2(int x,int y)main()main()外部变量声明外部变量声明定义外部变量定义外部变量定义外部变量定义外部变量定义外部变量定义外
40、部变量定义外部变量定义外部变量思考思考:在在f1函数中声明函数中声明c1、c2的作用是什么?如何修改的作用是什么?如何修改程序使所有函数都可以使用程序使所有函数都可以使用外部变量而又不需要声明?外部变量而又不需要声明?【例】在一个文件内声明外部变量。2005年1月39第40页琼琼 州州 学学 院院 内存分配内存分配编译时,将其分配在静态存储区,程序运行结束释放该单元。编译时,将其分配在静态存储区,程序运行结束释放该单元。变量的初值变量的初值若定义变量时未赋初值,在编译时,系统自动赋初值为若定义变量时未赋初值,在编译时,系统自动赋初值为0 0。生存期生存期整个程序的执行期间。整个程序的执行期间。
41、作用域作用域从定义处开始到本源文件结束。从定义处开始到本源文件结束。此外,还可以用此外,还可以用externextern进行声明,以使其作用域扩大到该程进行声明,以使其作用域扩大到该程序的其它文件中。序的其它文件中。外部变量外部变量2005年1月40第41页琼琼 州州 学学 院院4.寄存器变量(register类别)l l只有只有函数内定义的变量或形参函数内定义的变量或形参可以定义为寄存器可以定义为寄存器变量。寄存器变量的值保存在变量。寄存器变量的值保存在CPUCPU的寄存器中。的寄存器中。l l受寄存器长度的限制,受寄存器长度的限制,寄存器变量只能是寄存器变量只能是charchar、intint和指针类型的变量。和指针类型的变量。2005年1月41第42页琼琼 州州 学学 院院归纳变量的分类1 1按照变量的作用域对变量分类按照变量的作用域对变量分类 局部变量局部变量 全局变量全局变量2 2按照变量的生存期对变量分类按照变量的生存期对变量分类 静态存储变量静态存储变量包括:局部静态变量和全局变量包括:局部静态变量和全局变量 动态存储变量动态存储变量包括:自动变量包括:自动变量2005年1月42第43页琼琼 州州 学学 院院4.5 编译预处理(自学)2005年1月43
限制150内