动态(静态)存储变量,内部(外部)函数讲解.ppt

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态(静态)存储变量,内部(外部)函数讲解

8.9 动态存储变量与静态存储变量 目的:掌握变量的存储分类和存储方式以及动态存储与静态存储在使用上的不同: 重点:局部变量与全局变量的不同存贮方式及使用。 8.9.1 变量的存储类别 从变量的作用域来分。可分为全局变量和局部变量。 从变量值存在的时间分,可以分为静态存储变量和动态存储变量。 1。静态存储变量:在程序运行期间分配固定的存储空间的方式。 3。在存储空间中,在供用户使用的用户区域里分成三个区: (1)程序区--放用户程序 (2)静态存储区--放 用户区 ①全局变量: 程序执行时分配 程 序 区 固定的存储单元,结束释放。 静态存储区 ②用static 说明的局部变量。 动态存储区 (3)动态存储区--放 ①函数的形参。 ②自动变量(未用static说明的局部变量)。 ③函数调用时的现场保护和返回地址等。 2。动态存储变量:在程序运行期间,动态分配存储空间的方式。 静态存储区数据是存放在固定的存储单元中。 动态存储区的数据则是不固定的,需要实时分配空间,用毕后释放,下次再重新分配。如:同一变量调用多次时,所占的单元地址很可能不同。 4。C中的变量和函数都有两种属性 数据类型:整型、实型、字符型等。 数据存储类别: 自动的(auto),静态的(static),寄存器的(register),外部的(extern)。 ’redzist 8.9.2 局部变量的存储方式: 局部变量允许有三种存储方式: ①动态局部变量--自动变量。 ②静态局部变量 ③寄存变量 1。自动变量(动态局部变量) 未用static定义的局部变量为自动变量(auto)。 以前用的局部变量如:int x,char c等都属于这种类型。int x 与auto int x等价。 这种变量存储在动态存储区,由系统自动分配和释放存储空间。 2.*静态局部变量--保留值的局部变量 在局部变量前加stadic的变量为静态局部变量。(如: static int x;) 它既只能用于定义的函数中,又具有其值保留的特点。 函数调用后,其值并不取消,下次调用时,该值就是本次调用的初值。这种变量存储在静态存储区。 void main( ) { int a=2,i; for(i=0; i3; i++) printf(“%d”,f(a)); } b c a 1 . 开始: 0 3 2 结束 : 1 4 2 →7 2次开始 : 0 4 2 结束: 1 5 2 →8 0 5 2 第三次 1 6 2 9 结果 : 7 8 9 例1( 书例8.17) int f(int a) { auto int b=0 ; /* 同 int b=0;*/ static int c=3; b=b+1; c=c+1; return( a+b+c); } (2)虽然静态局部变量在调用结束时存在,但其它函数不能引用。因它是局部的。 (3)静态局部变量占内存多,且调用次数过多时,不易弄清它的当前值,不要多用静态局部变量。 说明: (1)当要保留上次调用值时,可用静态局部变量。 3 寄存变量:(了解) 用register说明存放在寄存器中的变量. 特点:执行速度快。 当运算时,需要多次调用同一变量(如求1~10000的和,用s=s+i, i要循环10000) 若用自动变量存取变量的值要化很多时间。 若用运算器的寄存器(运算器中临时存放数据的设备)中,即可大大提高执行速度。 register int i ; 8.9.3 用extern声明外部(全局)变量 *外部变量在函数外定义;编译时,分配静态存储区;一般可被程序中从定义开始后的各函数引用。 1。在一个文件内声明外部变量 在某函数中要引用一个外部变量,而它还未定义,该函数中必须用eatern说明,可扩展其作用域。 例3:int X=123; void main( ) { printf(“x=%d,y=%d\n”,X,Y); } int Y=200; 编译时会出错,因使用Y时未定义,应在printf前加一名外部变量的说明,extern int Y。 ←加 extern int Y; 一般外部变量在用它之前定义,使用时可不声明。 2。在多个文件内

文档评论(0)

2299972 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档