《计算机技术基础C语言 (28).pdf》由会员分享,可在线阅读,更多相关《计算机技术基础C语言 (28).pdf(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机技术基础(计算机技术基础(C语言)语言)电子信息系电子信息系计算机技术基础(计算机技术基础(C语言)语言)变量作用域2变量的作用域:是指变量的有效范围变量的作用域:是指变量的有效范围根据变量的作用域分为:局部变量和根据变量的作用域分为:局部变量和全局变量全局变量局部变量:局部变量:是只在一定范围内有效的变量是只在一定范围内有效的变量全局变量:全局变量:是在多个函数内有效的是在多个函数内有效的变量变量计算机技术基础(计算机技术基础(C语言)语言)变量作用域局部变量:局部变量:是指定义在一个程序块中的变量是指定义在一个程序块中的变量局部变量的定义位置及作用域局部变量的定义位置及作用域 在函数
2、体的开始处或者函数首部(形参);在函数体的开始处或者函数首部(形参);在函数内的复合语句内;在函数内的复合语句内;它的作用范围只是定义它的程序块。它的作用范围只是定义它的程序块。注意:注意:不同函数中的变量可以同名,它们互不影响;不同函数中的变量可以同名,它们互不影响;形式参数也属于局部变量;形式参数也属于局部变量;main函数中定义的变量也只能在函数中定义的变量也只能在main函数中有效。函数中有效。3计算机技术基础(计算机技术基础(C语言)语言)局部变量#include void sub();/函数原型声明函数原型声明int main()int a,b;a=3;b=4;printf(mai
3、n:a=%d,b=%dn,a,b);sub();printf(main:a=%d,b=%dn,a,b);return 0;void sub()int a,b;a=6;b=7;printf(sub:a=%d,b=%dn,a,b);运行结果:运行结果:main:a=3,b=4sub:a=6,b=7main:a=3,b=4float f1(int a)int b,c;.char f2(int x,int y)int i,j;main()int m,n;.a,b,c有效有效x,y,i,j有效有效m,n有效有效计算机技术基础(计算机技术基础(C语言)语言)变量作用域int p=1,q=5;float f
4、1(int a)int b,c;.char c1,c2;char f2(int x,int y)int i,j;int main()int m,n;.c1,c2的作用范围的作用范围p,q的作用范围的作用范围全局变量全局变量全局变量时指在任何函数之外全局变量时指在任何函数之外定义的变量;定义的变量;有效范围是从定义开始,直至有效范围是从定义开始,直至整个程序结束;整个程序结束;定义一个全局变量的目的就是定义一个全局变量的目的就是让多个函数可以共享。让多个函数可以共享。计算机技术基础(计算机技术基础(C语言)语言)变量作用域6注意:注意:全局变量全局变量之间不能重名,但允许全之间不能重名,但允许全
5、局变量与某个函数内部的局部变量局变量与某个函数内部的局部变量重名;重名;当一当一个局部变量与个局部变量与全局变量重名时全局变量重名时,在函数内部,全局变量被屏蔽,在函数内部,全局变量被屏蔽。#includeint a=3,b=5;/全局变量全局变量int max(int a,int b)/函数定义函数定义 int c;c=ab?a:b;return(c);int main()int a=8;printf(max=%d,max(a,b);return 0;运行结果:运行结果:max=8计算机技术基础(计算机技术基础(C语言)语言)变量作用域7不在必要时不使用全局变量:不在必要时不使用全局变量:全
6、局变量全局变量在程序的全部执行过程中都占用存储单元,而不在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟是仅在需要时才开辟单元;单元;降低了程序的可靠性和降低了程序的可靠性和通用性;通用性;使用使用全局变量过多,会降低程序的全局变量过多,会降低程序的清晰性。清晰性。计算机技术基础(计算机技术基础(C语言)语言)8变量的存储方式变量的存储方式:静态静态存储:程序运行期间分配固定存储:程序运行期间分配固定存储空间存储空间动态动态存储:程序运行期间根据需要动态分配存储:程序运行期间根据需要动态分配存储空间存储空间生存期生存期:静态变量静态变量:从程序开始执行到程序从程序开始执行到程序结束
7、结束动态变量动态变量:从包含该变量定义的函数开始执行至函数执行从包含该变量定义的函数开始执行至函数执行结束结束程序区程序区静态存储区静态存储区动态存储区动态存储区全局变量、局部静态变量全局变量、局部静态变量形参变量形参变量局部动态变量(局部动态变量(auto register)函数调用现场保护和返回地址等函数调用现场保护和返回地址等变量存储方式与作用域计算机技术基础(计算机技术基础(C语言)语言)变量存储类型与作用域9静态静态动态动态存储方式存储方式程序整个运行期间程序整个运行期间函数调用开始至结束函数调用开始至结束生存期生存期编译时赋初值,编译时赋初值,只赋一次只赋一次每次函数调用时每次函数
8、调用时赋初值赋初值自动赋初值自动赋初值0或空字符或空字符不确定不确定未赋初值未赋初值静态存储区静态存储区动态区动态区存储区存储区寄存器寄存器局部变量局部变量全局全局变量变量作用域作用域定义变量的函数或复合语句内定义变量的函数或复合语句内本文件本文件其它文件其它文件register局部局部staticauto外部外部static外部外部存储类别存储类别计算机技术基础(计算机技术基础(C语言)语言)10变量存储类型与作用域例例 文件文件file1.cint a;main().f2;.f1;.f1()auto int b;f2;.f2()static int c;c作用域作用域b作用域作用域a作用域
9、作用域mainf2f1mainf1f2maina生存期生存期:b生存期生存期:c生存期生存期:计算机技术基础(计算机技术基础(C语言)语言)11#include void increment(void);int main()increment();/第一次调用第一次调用increment();/第二次调用第二次调用increment();/第三次调用第三次调用return 0;void increment(void)int x=0;x+;printf(“%dn”,x);#include void increment(void);int main()increment();/第一次调用第一次调用increment();/第二次调用第二次调用increment();/第三次第三次调用调用return 0;void increment(void)static int x=0;x+;printf(“%dn”,x);变量存储类型与作用域运行结果:运行结果:123运行结果运行结果:111计算机技术基础(计算机技术基础(C语言)语言)12变量存储类型与作用域
限制150内