资源描述:
《上讲内容回顾函数间的参数传递函数的嵌套调用和递归调用.ppt》由会员上传分享,免费在线阅读,更多相关内容在PPT专区-天天文库。
1、上讲内容回顾函数间的参数传递函数的嵌套调用和递归调用第五章31研究式学习—C程序设计(第五章)第五章3本讲内容变量的作用域变量的存储类型编译预处理2研究式学习—C程序设计(第五章)变量的作用域main(){floatr,area;printf(“r=?”);scanf(“%f”,&r);area=carea(r);printf(“r=%5.2f,carae=%5.2f,cl=%5.2f”,r,area,cl);}程序运行结果:r=?3r=3.00,carae=28.26,c1=18.84问题:写一个函数,送入圆的半径后
2、,得到圆的面积及周长。return语句只能返回一个值,要返回多个值,要用全局变量。floatcl;/*定义全局变量c1*/floatcarea(floatr){floatar;ar=3.14*r*r;cl=2*3.14*r;returnar;}3研究式学习—C程序设计(第五章)floatf1(inta)/*定义f1函数*/{intb,c;…}charf2(intx)/*定义f2函数*/{intb,j;…}main()/*主函数*/{intm,n;…}p,q作用域c1,c2作用域局部变量(函数体内定义)作用域仅仅局限于定义它
3、的函数,在不同的函数内可以定义同名的局部变量(f1、f2函数都有变量b)全局变量(函数体外定义):作用域从它定义的位置开始到本源文件结束,变量名不能重。(c1,c2的作用范围小)intp=1,q=5;/*定义外部变量*/charc1,c2;/*定义外部变量*/4研究式学习—C程序设计(第五章)变量的存储类型(生存期)问题:通过5次函数调用打印1到5的阶乘值。1!=1,在1!的基础上再乘2,就得2!(2!=1!*2),在2!的基础上再乘3,就得3!(3!=2!*3),…,intfact(intx){staticintt=1;
4、t*=x;returnt;}main(){inti;for(i=1;i<=5;i++)printf(“%d!=%d”i,fact(i));}程序运行结果为:1!=12!=23!=64!=245!=120函数必须能保存上一次的阶乘值!5研究式学习—C程序设计(第五章)变量的完整定义一个变量的完整定义形式为:存储类型说明符数据类型说明符变量表如:staticintj;externfloatx等定义变量时不但要说明变量的数据类型,还要说明变量的存储类型。变量的存储类型确定了变量的存储方式、生存期和作用域。作用域:是指变量起作
5、用的有效范围。按变量的作用域可以把变量分为全局变量和局部变量。生存期:是指变量占用存储空间的时限。按变量的生存期可以把变量分为静态变量和动态变量。6研究式学习—C程序设计(第五章)C语言的内存空间程序代码区静态存储区动态存储区*存放可执行程序的机器指令*存放需要占用固定存储单元的变量*存放不需要占用固定存储单元的变量C语言程序所占用的存储空间通常分为三部分:全局变量或静态变量存放在静态存储区中,直到整个程序运行结束时才释放存储单元;局部变量或自动变量存放在动态存储区中,函数调用结束时就释放存储单元。7研究式学习—C程序设计
6、(第五章)变量的存储类型存储类型说明符有:auto(自动)型:属于临时性存储,其存储空间可以被若干变量多次覆盖使用register(寄存器)型(一般情况下不这样指定)*存放在CPU的通用寄存器中,目的是提高执行速度*long,double,float不能设为register型,因为超过寄存器长度static(静态)型:存放在静态存储区域中,生命期长extern(外部)型:用于定义或说明变量是外部的。8研究式学习—C程序设计(第五章)局部变量的存储类型:autostaticregister自动变量的使用:#在函数内定义的变量
7、,若没有指定存储类型就是自动类存储变量#自动变量是在动态存储区内分配单元的。调用函数时分配这些单元,返回时释放这些单元#自动变量在每调用一次时都赋一次值,且默认初值不确定voidtest_auto(){intva=0;printf(“auto=%d,”,va);++va;/*值不被保存*/}main(){inti;for(i=0;i<2;i++)test_auto();}va为自动变量,运行结果:auto=0,auto=0,9研究式学习—C程序设计(第五章)静态类变量voidtest_static(){staticintv
8、s=0;printf(“static=%d”,vs);++vs;}main(){inti;for(i=0;i<4;i++)test_static();}运行结果:static=0static=1static=2static=3*静态局部变量是在静态存储区分配存储单元的,调用结束后其值不消失,但其它函