【文档说明】(演示)计算机程序设计基础(c语言)-第5章_函数(变量作用域)讲解课件.ppt,共(15)页,120.001 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-76357.html
以下为本文档部分文字说明:
第5章函数2变量的作用域•指在源程序中定义变量的位置及其能被读写访问的范围•分为–局部变量–全局变量教材170页3局部变量在语句块内定义的变量是内部变量,它只在本函数范围内有效,这种变量被称为局部变量.说明:(1)main()中定义的变量,也只在main()中有效(2)不同函数中可以使用相
同名字的变量,他们代表不同的对象,互不干扰(3)形参也是局部变量,在本函数中有效(4)在复合语句中定义的变量,作用范围为该复合语句floatf1(inta){intb,c;…}charf2(intx,inty){intb,c;…}main(){intm,n;…}4例局部变
量的作用范围voidother(void){inti=16,a=100;printf("--OTHER--\ni:%da:%d\n",i,a);}main(){inti=1,a=10,b=5;printf("--MAIN---\ni:%da:%db:%d\n
",i,a,b);other();printf("--MAIN--\ni:%da:%db:%d\n",i,a,b);}5例5.8同名局部变量各自作用域#include<stdio.h>voidGlobalP
lusPlus(void);main(){intglobal=1;printf("BeforeGlobalPlusPlus(),itis%d\n",global);GlobalPlusPlus();printf("AfterGlobalPl
usPlus(),itis%d\n",global);}voidGlobalPlusPlus(void){intglobal=1;printf("Before++,itis%d\n",global);global++;print
f("After++,itis%d\n",global);}教材173页6全局变量在所有函数之外说明的变量称为外部变量,而外部变量是全局变量,它在所有函数中都是可见的。说明1.作用是增加了函数间数据的联系渠道,利用全局变量的这个特性,可以在函数间传递数据2.不在必要时不要使用全局
变量3.在同一个源文件中外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即不起作用7例5.7#include<stdio.h>intglobal;/*定义全局变量*/voidGlobalPlusPlus(v
oid);main(){global=1;printf("BeforeGlobalPlusPlus(),itis%d\n",global);GlobalPlusPlus();printf("AfterGlobalPlusPlus(),itis%d\n",global
);}voidGlobalPlusPlus(void){printf("Before++,itis%d\n",global);global++;printf("After++,itis%d\n",global);}
BeforeGlobalPlusPlus(),itis1Before++,itis1After++,itis2AfterGlobalPlusPlus(),itis2教材173页8例全局变量与局部变量同名#include<stdio.h>inta=3
,b=5;max(inta,intb){intc;c=a>b?a:b;return(c);}main(){inta=8;pirntf("%d",max(a,b));}9供用户使用的内存空间的情况程序和数据
分开存放,数据分别存放在静态存储区和动态存储区用户区程序区静态存储区动态存储区静态存储区:全局变量全部存放在其中,在程序执行时给全局变量分配存储区,程序执行完毕就释放.动态存储区:存放(1)函数的形式参数:在调用时分配存储空间(2)自动变量(未加static声明的局部变量)(3)函数
调用时的现场保护和返回地址(背诵)10变量的存储类型存储类型是指数据在内存中的存储方式.是编译器为变量分配内存的方式,它决定变量的生存期.分类:静态存储:系统给变量在程序运行期间分配固定的存储空间的方式动态存储:系统给变量在程序运行期间根据需要进行动态的分
配存储空间的方式具体包含四种:自动的(auto),静态的(static)寄存器的(register),外部的(extern)11变量的存储类别•auto(自动)变量例如:intf(inta){autointc=3;…}包括函数中的定义的局部变量和函数形参。动态分配
存储空间,在函数被调时分配,调用结束时自动释放存储空间。变量中的值被释放可以缺省教材174页12static(静态)局部变量•static(静态)局部变量例如:intf(inta){staticm=3;…}该局部变量占用的存储空间不释放,意味着保留该变量的原值属
于静态存储类别,在静态存储区内分配存储单元,在程序的整个运行期间都不释放。在编译时赋初值,即只赋初值一次,以后每次调用函数时不再重新赋初值,而保留上次函数调用结束时的值。定义时如果不赋值,编译时自动赋初值为0。不能像全局变量一样被其他函数引用13例
5.9#include<stdio.h>voidFunc(void);main(){inti;for(i=0;i<10;i++){Func();}}voidFunc(void){inttimes=1;/*自动变量*/printf("Func()wascalled%dt
ime(s).\n",times++);}Func()wascalled1time(s).Func()wascalled1time(s).Func()wascalled1time(s).Func()wascal
led1time(s).Func()wascalled1time(s).Func()wascalled1time(s).Func()wascalled1time(s).Func()wascalled1time(s).F
unc()wascalled1time(s).Func()wascalled1time(s).教材175页14例5.9#include<stdio.h>voidFunc(void);main(){inti;for(i=0;i<10;i
++){Func();}}voidFunc(void){staticinttimes=1;/*静态局部变量*/printf("Func()wascalled%dtime(s).\n",times++);}Func()wascalled1time(s).Func()wascal
led2time(s).Func()wascalled3time(s).Func()wascalled4time(s).Func()wascalled5time(s).Func()wascalled6time(s).Func()wascalled7time(s).Fun
c()wascalled8time(s).Func()wascalled9time(s).Func()wascalled10time(s).教材175页15静态变量-习题5.3#include<stdi
o.h>intSquare(inti){returni*i;}main(){inti=0;i=Square(i);for(;i<3;i++){staticinti=1;i+=Square(i);printf("%d,",i);}printf("%d\n",i)
;}for循环自动变量i循环开始时静态变量i循环结束时静态变量i第1次循环012第2次循环126第3次循环2642循环结束时3××自动变量i静态变量i