第七章 变量的存储 预处理精选PPT.ppt





《第七章 变量的存储 预处理精选PPT.ppt》由会员分享,可在线阅读,更多相关《第七章 变量的存储 预处理精选PPT.ppt(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 1第1页,本讲稿共35页变量的属性变量的属性数据类型数据类型:变量所持有的数据的性质(操作属性)变量所持有的数据的性质(操作属性)存储属性存储属性:存储器类型:存储器类型:寄存器、静态存储区、动态存储区寄存器、静态存储区、动态存储区生存期生存期:变量在某一时刻存在变量在某一时刻存在静态变量与动静态变量与动态变量态变量作用域作用域:变量在某区域内有效变量在某区域内有效局部变量与全局部变量与全局变量局变量变量定义格式:变量定义格式:存储类型存储类型数据类型数据类型变量表变量表;例:例:intsum;externinta,b,c;registerinti;staticfloatx,y;第2页,本
2、讲稿共35页变量的作用域变量的作用域w变量的作用域:变量有效的范围。变量的作用域:变量有效的范围。w语言中所有的变量都有自己的作用域。语言中所有的变量都有自己的作用域。w变量说明的方式不同,其作用域也不同。变量说明的方式不同,其作用域也不同。w语言的变量,按作用域范围可分为两种:语言的变量,按作用域范围可分为两种:局部变量和全局变量。局部变量和全局变量。3 3第3页,本讲稿共35页局部变量局部变量内部变量内部变量w定义:在函数内定义,只在本函数内有效定义:在函数内定义,只在本函数内有效w说明:说明:mainmain中定义的变量只在中定义的变量只在mainmain中有效中有效不同函数中同名变量,
3、占不同内存单元不同函数中同名变量,占不同内存单元形参属于局部变量形参属于局部变量可定义在复合语句中有效的局部变量可定义在复合语句中有效的局部变量floatf1(inta)intb,c;.charf2(intx,inty)inti,j;main()intm,n;.a,b,c有效x,y,i,j有效m,n有效4 4第4页,本讲稿共35页例:不同函数中同名变量例:不同函数中同名变量main()inta,b;a=3;b=4;printf(main:a=%d,b=%dn,a,b);sub();printf(main:a=%d,b=%dn,a,b);sub()inta,b;a=6;b=7;printf(su
4、b:a=%d,b=%dn,a,b);运行结果:运行结果:main:a=3,b=4sub:a=6,b=7main:a=3,b=45 5第5页,本讲稿共35页全局变量全局变量外部变量外部变量n定义:在函数外定义,可为本文件所有函数共用。定义:在函数外定义,可为本文件所有函数共用。n有效范围:从定义变量的位置开始到本源文件结有效范围:从定义变量的位置开始到本源文件结束,及有束,及有extern声明的其它源文件。声明的其它源文件。应尽量少使用全局变量,因为:应尽量少使用全局变量,因为:全局变量在程序全部执行过程中占用存储单元全局变量在程序全部执行过程中占用存储单元降低了函数的通用性、可靠性,可移植性降
5、低了函数的通用性、可靠性,可移植性降低程序清晰性,容易出错降低程序清晰性,容易出错定义定义声明声明次数:次数:只能只能1次次可声明多次可声明多次位置:位置:所有函数之外所有函数之外函数内或函数外函数内或函数外分配内存:分配内存:分配内存分配内存,可初始化可初始化不分配内存不分配内存,不可初始化不可初始化外部变量声明:外部变量声明:extern数据类型数据类型变量表;变量表;外部变量定义与外部变量声明不同外部变量定义与外部变量声明不同若外部变量与局部变量同名,则外部变量被屏蔽若外部变量与局部变量同名,则外部变量被屏蔽6 6第6页,本讲稿共35页inta=3,b=5;max(inta,intb)i
6、ntc;c=ab?a:b;return(c);main()inta=8;printf(max=%d,max(a,b);例:外部变量与局部变量例:外部变量与局部变量运行结果:运行结果:max=8例:外部变量定义与声明例:外部变量定义与声明externinta,b;intmax()intz;z=ab?a:b;return(z);main()printf(max=%d,max();inta=13,b=-8;外部变量定义及初始化外部变量声明运行结果:运行结果:max=137 7第7页,本讲稿共35页intp=1,q=5;floatf1(inta)intb,c;.intf3().charc1,c2;ch
7、arf2(intx,inty)inti,j;main()intm,n;.c1,c2的作用范围p,q的作用范围externcharc1,c2;externcharc1,c2;c1,c2的的作作用用范范围围扩扩展展后后c1,c2的的作作用用范范围围扩扩展展后后8 8第8页,本讲稿共35页voidmain()voidgx(),gy();externintx,y;printf(“1:x=%dty=%dn”,x,y);y=246;gx();gy();voidgx()externintx,y;x=135;printf(“2:x=%dty=%dn”,x,y);intx,y;voidgy()printf(“3
8、:x=%dty=%dn”,x,y);例:用例:用extern扩展外部变量作用域扩展外部变量作用域运行结果:运行结果:1:x=0y=02:x=135y=2463:x=135y=2469 9第9页,本讲稿共35页引用其它文件中的外部变量引用其它文件中的外部变量int global;extern float x;main()int local;.extern int global;static int number;func2().float x;unc3()extern int global;.file1.cfile2.cfile3.c1010第10页,本讲稿共35页变量的存储类型变量的存储类型程
9、序区静态存储区动态存储区全局变量、局部静态变量形参变量局部动态变量(auto register)函数调用现场保护和返回地址等内存用户区11 11第11页,本讲稿共35页n动态变量与静态变量动态变量与静态变量存储方式存储方式w静态存储:静态存储:程序运行期间分配固定存储空间程序运行期间分配固定存储空间w动态存储:动态存储:程序运行期间根据需要动态分配存储空间程序运行期间根据需要动态分配存储空间生存期生存期静态变量:静态变量:从程序开始执行到程序结束从程序开始执行到程序结束动态变量:动态变量:从包含该变量定义的函数开始执行至函数从包含该变量定义的函数开始执行至函数执行结束执行结束变量的存储类型变量
10、的存储类型auto-自动型自动型register-寄存器型寄存器型static-静态型静态型extern-外部型外部型1212第12页,本讲稿共35页n变量存储类型变量存储类型静态动态存储方式程序整个运行期间函数调用开始至结束生存期编译时赋初值,只赋一次 每次函数调用时赋初值自动赋初值0或空字符不确定未赋初值静态存储区动态区存储区寄存器局部变量外部变量作用域定义变量的函数或复合语句内本文件其它文件局部变量默认为局部变量默认为autoauto型型registerregister型变量个数受限型变量个数受限,且不能为且不能为long,double,floatlong,double,float型型局
11、部局部staticstatic变量具有变量具有全局寿命全局寿命和和局部可见性局部可见性局部局部staticstatic变量具有变量具有可继承性可继承性externextern不用于变量定义不用于变量定义,可扩展外部变量作用域可扩展外部变量作用域register局部staticauto外部static外部存储类别1313第13页,本讲稿共35页例:文件例:文件file1.cinta;main().f2;.f1;.f1()autointb;f2;.f2()staticintc;C作用域b作用域a作用域mainf2f1mainf1f2maina生存期:b生存期:c生存期:1414第14页,本讲稿共3
12、5页main()voidincrement(void);increment();increment();increment();voidincrement(void)intx=0;x+;printf(“%dn”,x);例:局部静态变量值具有可继承性例:局部静态变量值具有可继承性运行结果:运行结果:111main()voidincrement(void);increment();increment();increment();voidincrement(void)staticintx=0;x+;printf(“%dn”,x);运行结果:运行结果:1231515第15页,本讲稿共35页例:变量的寿
13、命与可见性例:变量的寿命与可见性#includeinti=1;main()staticinta;registerintb=-10;intc=0;printf(-MAIN-n);printf(i:%da:%db:%dc:%dn,i,a,b,c);c=c+8;other();printf(-MAIN-n);printf(i:%da:%db:%dc:%dn,i,a,b,c);i=i+10;other();other()staticinta=2;staticintb;intc=10;a=a+2;i=i+32;c=c+5;printf(-OTHER-n);printf(i:%da:%db:%dc:%dn
14、,i,a,b,c);b=a;-Main-i:1a:0b:-10c:0-Other-i:33a:4b:0c:15-Main-i:33a:0b:-10c:8-Other-i:75a:6b:4c:15全局i1main:a0b:-10registermain:c0静态存储区动态存储区other:a2other:b0other:c10843315443other:c106751561616第16页,本讲稿共35页#includeinti=10;intmain()inti=1;printf(%dt,i);inti=2;pritnf(%dt,i);externi;i+=1;printf(%dt,i);pri
15、ntf(%dt,+i);printf(%dn,+i);运行结果为运行结果为:121132 例:1717第17页,本讲稿共35页内存动态申请和释放内存动态申请和释放wvoid*malloc(unsignedintsize)在动态存储区分配长度为在动态存储区分配长度为size的连续空间,并返回指的连续空间,并返回指向该空间起始地址的指针。若分配失败(系统不能提向该空间起始地址的指针。若分配失败(系统不能提供所需内存),则返回空指针供所需内存),则返回空指针(NULL)。例:例:int*p=(int*)malloc(sizeof(int)*length);wvoidfree(void*ptr)释放释
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七章 变量的存储 预处理精选PPT 第七 变量 存储 预处理 精选 PPT

限制150内