资源描述:
《c语言第8章函数与预处理命令》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章函数与预处理命令华北电力大学计算机系C语言程序设计(2)1第8章函数与预处理命令8.6变量的存储类别及变量的生存期8.7编译预处理8.8多文件程序的调试方法8.9指向函数的指针变量28.6变量的存储类别及变量的生存期8.6.1变量的生存期与变量的存储分类变量的生存期:变量在内存中占据存储空间的时间。思考:1.何时为变量分配内存单元?2.将变量分配在内存的什么区域?3.变量占据内存的时间(生存期)?程序代码区静态存储区动态存储区存储分配动态存储变量静态存储变量38.6.2变量的存储类别变量的属性数据
2、类型:intx;决定为变量分配内存单元的长度,数据的存放形式,数的范围。存储类别:staticintx;决定了变量的生存期,给它分配在哪个存储区。4变量定义语句的一般形式[存储类别]数据类型变量名1,…,变量名n;auto(自动的)register(寄存器的)static(静态的)extern(外部的)1.自动变量(auto类别,可以省略)局部变量可以定义为自动变量。voidmain(){intx,y;…}voidmain(){autointx,y;…}自动变量等价可省5⑴内存分配调用函数或执行分程
3、序时在动态存储区为其分配存储单元,函数或分程序执行结束,所占内存空间即刻释放。⑵变量的初值定义变量时若没赋初值,变量的初值不确定;如果赋初值则每次函数被调用时执行一次赋值操作。⑶生存期在函数或分程序执行期间。⑷作用域自动变量所在的函数内或分程序内。自动变量62.静态变量(static类别)除形参外,局部变量和全局变量都可以定义为静态变量。局部静态变量(或称内部静态变量)全局静态变量(或称外部静态变量)静态变量静态变量staticinta;main(){floatx,y;…}f(){staticintb=
4、1;……}全局静态变量局部静态变量自动变量不能省7⑴内存分配编译时,将其分配在内存的静态存储区中,程序运行结束释放该单元。⑵静态变量的初值若定义时未赋初值,在编译时,系统自动赋初值为0;若定义时赋初值,则仅在编译时赋初值一次,程序运行后不再给变量赋初值。⑶生存期整个程序的执行期间。⑷作用域局部静态变量的作用域是它所在的函数或分程序。全局静态变量的作用域是从定义处开始到本源文件结束。静态变量8#includeintfunc(intn){intf=1;f=f*n;returnf;}void
5、main(){inti,n=5;for(i=2;i<=n;i++)printf(“%d,”,func(i));}#includeintfunc(intn){staticintf=1;f=f*n;returnf;}voidmain(){inti,n=7;for(i=2;i<=n;i++)printf(“%d,”,func(i));}运行结果:2,3,4,5,6,7,运行结果:2,6,24,120,720,5040,9intc;staticinta;main(){floatx,y;…}ch
6、ars;f(){staticintb=1;……}3.外部变量(extern类别)在函数外定义的变量若没有用static说明,则是外部变量。外部变量只能隐式定义为extern类别,不能显式定义。全局静态变量自动变量局部静态变量外部变量10⑴内存分配编译时,将其分配在静态存储区,程序运行结束释放该单元。⑵变量的初值若定义变量时未赋初值,在编译时,系统自动赋初值为0。⑶生存期整个程序的执行期间。⑷作用域从定义处开始到本源文件结束。此外,还可以用extern进行声明,以使其作用域扩大到该程序的其它文件中。外部变
7、量问题:全局静态变量的作用域可以扩展到本程序的其它文件吗?11外部变量声明的一般格式extern数据类型变量名1,…,变量名n;或extern变量名1,…,变量名n;注意:①外部变量声明用关键字extern,而外部变量的定义不能用extern,只能隐式定义。②定义外部变量时,系统要给变量分配存储空间,而对外部变量声明时,系统不分配存储空间,只是让编译系统知道该变量是一个已经定义过的外部变量,与函数声明的作用类似。12intp=1,q=5;floatf1(inta){externcharc1,c2;……}
8、charc1,c2;charf2(intx,inty){……}main(){……}外部变量声明定义外部变量定义外部变量思考:在f1函数中声明c1、c2的作用是什么?如何修改程序使所有函数都可以使用外部变量而又不需要声明?【例8.24】在一个文件内声明外部变量。13【例8.25】在多文件的程序中声明外部变量。file1.c文件中程序如下:#includeinti;voidmain(){voidf1(),f2(),f3();i