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





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

限制150内