第六章变量与函数_第1页
第六章变量与函数_第2页
第六章变量与函数_第3页
第六章变量与函数_第4页
第六章变量与函数_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第6 6章章 变量与函数变量与函数思考思考不同函数中的变量是否可以同名?不同函数中的变量是否可以同名?同一个变量是否可以在不同函数中使用?同一个变量是否可以在不同函数中使用?一个工程下是否可以有多个源文件?一个工程下是否可以有多个源文件?一个文件是否可以使用另外一个文件的变量、函数?一个文件是否可以使用另外一个文件的变量、函数?变量的作用域变量的作用域 指在源程序中定义变量的位置及其能被读写访问的范指在源程序中定义变量的位置及其能被读写访问的范围。围。按变量作用域变量可分为按变量作用域变量可分为局部变量(局部变量(Local VariableLocal Variable) 全局变量(全局变量

2、(Global Variable Global Variable )局部变量局部变量局部变量局部变量在函数内部或复合语句块内定义的变量在函数内部或复合语句块内定义的变量形参也是局部变量形参也是局部变量特点特点定义时不会自动初始化,除非程序员指定初值。定义时不会自动初始化,除非程序员指定初值。进入函数或语句块时获得内存,仅能由函数内部或语句进入函数或语句块时获得内存,仅能由函数内部或语句块内语句访问,退出函数或语句块时释放内存,不再有块内语句访问,退出函数或语句块时释放内存,不再有效效 。不同函数各自定义的同名变量互不干扰。不同函数各自定义的同名变量互不干扰。float f1(int a) in

3、t b,c; .char f2(int x,int y) int i,j; main() int m,n; .a,b,ca,b,c有效有效x,y,i,jx,y,i,j有效有效m,nm,n有效有效运行结果:运行结果:5 4 3 2 15 4 3 2 1例例 复合语句中变量复合语句中变量#define N 5#define N 5void main()void main() int i; int i; int aN=1,2,3,4,5; int aN=1,2,3,4,5; for(i=0;iN/2;i+) for(i=0;iN/2;i+) int temp;int temp;temp=ai;tem

4、p=ai;ai=aN-i-1;ai=aN-i-1;aN-i-1=temp;aN-i-1=temp; for(i=0;iN;i+) for(i=0;iN;i+) printf(%d ,ai); printf(%d ,ai); 例例 不同函数中同名变量不同函数中同名变量void sub()void sub() int a,b;int a,b; a=6; a=6; b=7; b=7; printf(sub:a=%d,b=%dn,a,b); printf(sub:a=%d,b=%dn,a,b); void main()void main() int a,b;int a,b; a=3; a=3; b=4

5、; b=4; printf(main:a=%d,b=%dn,a,b); printf(main:a=%d,b=%dn,a,b); sub(); sub(); printf(main:a=%d,b=%dn,a,b); printf(main:a=%d,b=%dn,a,b); 运行结果:运行结果:main:a=3,b=4main:a=3,b=4sub:a=6,b=7sub:a=6,b=7main:a=3,b=4main:a=3,b=4全局变量全局变量全局变量全局变量在所有函数之外定义的变量。在所有函数之外定义的变量。特点特点在程序中定义它的位置以后都有效在程序中定义它的位置以后都有效在定义点之前或

6、在其他文件中引用,应该进行如下声明:在定义点之前或在其他文件中引用,应该进行如下声明: extern extern 类型名类型名 变量名变量名; ;从程序运行起即占据内存,程序运行过程中可随时访问,从程序运行起即占据内存,程序运行过程中可随时访问,程序退出时释放内存程序退出时释放内存 若外部变量与局部变量同名,则外部变量被屏蔽若外部变量与局部变量同名,则外部变量被屏蔽使函数之间的数据联系更容易,也更高效使函数之间的数据联系更容易,也更高效但是并不推荐使用,尽量少用但是并不推荐使用,尽量少用因为谁都可以改写全局变量,所以很难确定是谁改写了它因为谁都可以改写全局变量,所以很难确定是谁改写了它flo

7、at max,min;float max,min;float Average(float array, int n);float Average(float array, int n);int main()int main() int i; float ave,score10; int i; float ave,score10; / /* *Input Input * */ / ave= ave=Average(score,10);Average(score,10); printf(max=%6.2fnmin=%6.2fn printf(max=%6.2fnmin=%6.2fn average

8、=%6.2fn, average=%6.2fn,max,min,max,min,ave);ave); return 0; return 0; float Average(float array, int n);float Average(float array, int n); int i; float sum=array0; int i; float sum=array0; max=min=array0; max=min=array0; for(i=1;in;i+) for(i=1;imax) if(arrayimax) max max=arrayi;=arrayi; if(arrayimi

9、n) if(arrayib?a:bc=ab?a:b; ; return( return(c c);); 请写出运行结果请写出运行结果运行结果:运行结果:max=8max=8练习题练习题void gx(void);void gx(void);void gy(void);void gy(void);int main()int main() extern int x,y;extern int x,y; printf(“1: x=%dty=%dn”,x,y); printf(“1: x=%dty=%dn”,x,y); y=246; y=246; gx(); gx(); gy(); gy(); retu

10、rn 0; return 0; void gx()void gx() extern int x,y;extern int x,y; x=135; x=135; printf(“2: x=%dty=%dn”,x,y); printf(“2: x=%dty=%dn”,x,y); int x,y;int x,y;void gy()void gy() printf(“3: x=%dty=%dn”,x,y); printf(“3: x=%dty=%dn”,x,y); 例例 用用externextern扩展外部变量作用域扩展外部变量作用域运行结果:运行结果:1: x=0 y=01: x=0 y=02: x

11、=135 y=2462: x=135 y=2463: x=135 y=2463: x=135 y=246变量的存储类型变量的存储类型 指数据在内存中存储的方式指数据在内存中存储的方式即编译器为变量分配内存的方式,它决定变量的即编译器为变量分配内存的方式,它决定变量的生存期(变生存期(变量值存在的时间)量值存在的时间)动态存储动态存储根据需要临时分配存储空间,离开即释放根据需要临时分配存储空间,离开即释放静态存储静态存储在程序运行期间分配固定的存储空间不释放在程序运行期间分配固定的存储空间不释放程序区程序区静态存储区静态存储区动态存储区动态存储区形参、自动变形参、自动变量、函数调用量、函数调用的

12、现场等的现场等全局变量、全局变量、静态变量静态变量请注意区别变量的请注意区别变量的数据类型和变量的数据类型和变量的存储类型!存储类型! 自动变量自动变量 (auto auto )“自动自动”体现在体现在进入函数内部或复合语句块时自动申请内存,退出进入函数内部或复合语句块时自动申请内存,退出时自动释放内存时自动释放内存 标准定义格式标准定义格式 auto 类型名类型名 变量名变量名;动态局部变量动态局部变量缺省的存储类型缺省的存储类型不初始化时,值是不确定的不初始化时,值是不确定的静态变量(静态变量(static)一般的内部变量一般的内部变量在函数退出后失效,再次进入函数,变量值重新初在函数退出

13、后失效,再次进入函数,变量值重新初始化始化静态变量静态变量在变量类型前面用在变量类型前面用staticstatic修饰修饰static int i;static int i;变量的值可以保存到下次进入函数,使函数具有记变量的值可以保存到下次进入函数,使函数具有记忆功能忆功能静态变量和全局变量都是静态存储类型静态变量和全局变量都是静态存储类型自动初始化为自动初始化为0 0从静态存储区分配,从静态存储区分配,生存期生存期为整个程序运行期间为整个程序运行期间但作用域不同但作用域不同程序区程序区静态存储区静态存储区动态存储区动态存储区形参、自动变形参、自动变量、函数调用量、函数调用的现场等的现场等全局

14、变量、全局变量、静态变量静态变量#include void Func(void);int main()int i;for (i=0; i10; i+)Func(); return 0;/* 函数功能函数功能: 打印被调用的次数打印被调用的次数 函数入口参数:函数入口参数: 无无 函数返回值:函数返回值: 无无*/void Func(void)int times = 1;/*自动自动变量变量*/printf(Func() was called %d time(s).n, times+);#include void Func(void);int main()int i;for (i=0; i10;

15、 i+)Func(); return 0;/* 函数功能函数功能: 打印被调用的次数打印被调用的次数 函数入口参数:函数入口参数: 无无 函数返回值:函数返回值: 无无*/void Func(void)static int times = 1;/*静态局部变量静态局部变量*/printf(Func() was called %d time(s).n, times+);寄存器变量(寄存器变量(register)寄存器寄存器CPUCPU的内部容量很有限、但速度极快的存储器的内部容量很有限、但速度极快的存储器使用频率比较高的变量声明为使用频率比较高的变量声明为register ,可以使,可以使程序更

16、小、执行速度更快程序更小、执行速度更快register 类型名类型名 变量名变量名; register int i;现代编译器有能力自动把普通变量优化为寄存器变现代编译器有能力自动把普通变量优化为寄存器变量,并且可以忽略用户的指定,所以一般无需特别量,并且可以忽略用户的指定,所以一般无需特别声明变量为声明变量为register 变量生存期变量生存期变量在某一时刻存在,则这时属变量的变量在某一时刻存在,则这时属变量的“生存期生存期”(从给变量分配内存至所分配内存被系统收回的时(从给变量分配内存至所分配内存被系统收回的时间间隔)间间隔)静态变量静态变量: :从程序开始执行到程序结束从程序开始执行到

17、程序结束动态变量动态变量: :从包含该变量定义的函数开始执行至函从包含该变量定义的函数开始执行至函数执行结束。数执行结束。例例 文件文件file1.cint a;main( ) . . f2(); . f1(); .f1( ) auto int b; f2(); .f2( ) static int c; c 作用域作用域b作用域作用域a作用域作用域mainf2f1mainf1f2maina生存期生存期:b生存期生存期:c生存期生存期:引用其它文件中的外部变量引用其它文件中的外部变量int global;int global;int main()int main() int int local;

18、local;. . . . extern int global;extern int global;void func2()void func2() . .在此可以使用在此可以使用file1.cfile1.c中的中的global.global. . file1.cfile1.cfile2.cfile2.c例例 引用其它文件中的变量,输出引用其它文件中的变量,输出a a的的m m次方次方/main.c/main.cint a;int a;int power(int n);int power(int n);int main()int main() int d,m; int d,m; printf(Enter the number a and its power:n); printf(Enter the number a and its power:n); scanf(%d,%d,&a,&m); scanf(%d,%d,&a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论