资源描述:
《《变量作用域和预编译》》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、变量作用域和预编译1回顾:模块化程序设计1.主函数,库函数和自定义函数的区别2.自定义函数的定义、设计3.递归函数的定义和用途回顾:模块化程序设计课程目标:了解变量作用域的概念掌握全局变量与局部变量的区别(重点)掌握变量的存储类别(难点)参考课本P168~P175了解预编译的概念掌握宏的概念及#define的使用(重点)掌握文件包含及#include的使用参考课本P230~P2392本次课内容本次课内容3变量的使用范围与存储类型“变量”—是指在程序运行过程中其值可以发生变化的量。通常是用来表示在程序中对数据存储空间的一种抽象的描述。当我们在学习C语
2、言中的变量时,必须要掌握变量的有关属性:1、变量的数据类型及其定义方法2、变量的初始化3、变量的使用范围及其说明方法4、变量的存储类别及其定义方法一、变量的使用范围与存储类型4变量的使用范围包括有在一个函数内部使用的变量---局部变量;在函数之外部使用的变量---全局变量;main(){inta,b;……}在一个函数内部定义的变量称为局部变量intfun(intx){inti,j;……}局部变量局部变量1、局部变量1.1变量的使用范围:局部变量51、主函数中定义的变量也只用在主函数中有效;关于局部变量使用的几点说明2、不同函数中可以使用相同的变量名
3、,且它们代表不同的存储单元,互不干扰;3、形式参数也是局部变量。其它函数是不能调用该形参的;4、在一个函数内部,可以在复合语句中定义变量,这些变量只能在本复合语句中有效。1.1.1关于局部变量使用的几点说明6在函数内部(包括主函数)定义的变量,称为局部变量,其作用范围只在函数内部有效,如下代码#includevoidfund1(void){intnX=100;//局部变量printf(“nXinfund1=%d”,nX);}voidfund2(void){intnX=200;//局部变量printf(“nXinfund2=%
4、d”,nX);}voidmain(void){intnX=50;//局部变量printf(nXinmain=%d”,nX);fund1();fund2();}程序代码本例中定义了三个局部变量nX,其作用范围分别作用于fund1,fund和main函数打印结果:nXinmain=50nXinfund1=100nXinfund2=200示例:局部变量示例:局部变量7charc1,c2;intp=1,q=5;main(){inta,b;a=p;b=q;……}在函数之外定义的变量称为全局变量全局变量可以为本文件中其它函数所共用。它的使用范围:从定
5、义变量的位置开始到本源程序文件结束全局变量f1(intx){inti,j,z;z=p+x;……}f2(inty){charch=‘a’,c2=‘b’;c1=ch;ch=c2;……}2、全局变量1.2变量的使用范围:全局变量81、若在同一个源文件中,如有全局变量与局部变量同名时,则在局部变量的作用范围内,全局变量不起作用。2、设置全局变量的作用是:增加函数间数据联系的渠道。由于同一个文件中的所有函数都能引用全局变量的值,因此如果在一个函数中改变了全局变量的值,就能影响到其它函数,相当于各个函数间有直接的传递通道。关于全局变量使用的几点说明1.2.1关
6、于全局变量使用的几点说明9举例示例:全局变量intd=1;main(){inta=3;fun(a);d+=a++;printf(“%d”,d);}fun(intp){intd=5;d+=p++;printf(“%d”,d);return;}1d3a3p5d84844示例:全局变量10#includeintnX=999;//全局变量voidfund1(void){printf(“nXinfund1=%d”,nX);}voidfund2(void){intnX=0;//局部变量printf(“nXinfund2=%d
7、”,nX);}voidmain(void){printf(nXinmain=%d”,nX);fund1();fund2();}程序代码在此范围中,局部变量nX的作用范围替代了全局变量nX的作用范围。本例中函数fund2中的nX作用范围与全局变量nX有重叠部分,在重叠部分中使用局部变量,屏蔽掉了全局变量打印结果:nXinmain=999nXinfund1=999nXinfund2=0变量作用范围重叠问题1.2.2变量作用范围重叠问题11数据区(动态)数据区(静态)内存存储区程序区用户区在程序运行期间分配固定的存储空间(如全局变量)。静态数据区动
8、态数据区只有当函数被调用时才开始分配存储空间,在函数执行结束时就释放这些空间。在程序执行过程中,这种分配和释放是动态的(如