网站大量收购独家精品文档,联系QQ:2885784924

第7章 函数3.ppt

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

第 7 章 函 数 变量的存储类别 存储类别用于指明数据在内存中存储的方式(静态存储或动态存储) 存储类别有 auto static register extern 根据变量的存储类别,可以知道变量的作用域和生存期 局部变量的存储类别 2.静态局部变量(static局部变量) 属于静态存储方式,在整个程序运行中都存在 延长了局部变量的生存期 作用域不变 若没有赋初值,编译时自动赋初值0或空字符。 内部函数和外部函数 根据函数能否被其他源文件调用来区分 内部函数 只能被本文件中其他函数调用 在函数类型前用static说明,静态函数 外部函数 可供其它文件调用, 定义时用extern表示,可省略 在其他文件中,用extern声明,可省略 2. 将外部变量的作用域扩展到其他文件 如果一个程序包含两个文件,在两个文件中都要用到同一个外部变量Num,不能分别在两个文件中各自定义一个外部变量Num 应在一个文件中定义外部变量Num,而在另一文件中用extern对Num作“外部变量声明” 在编译和连接时,系统会由此知道Num有“外部链接”,可以从别处找到已定义的外部变量Num,并将在另一文件中定义的外部变量num的作用域扩展到本文件 int A=60; void prt_pass(int a[ ], int n); void main( ) { int i , score[10]; for( i=0; i10; i++ ) scanf( “%d”, score[i] ); prt_pass(score,10); } File1.c extern int A; /* extern A; */ void prt_pass(int a[], int n) { int i; for( i=0; in; i++ ) if(a[i]=A) printf( “%d ”, a[i] ); } File2.c 扩展外部变量的作用域到其他文件 3.将外部变量的作用域限制在本文件中 有时在程序设计中希望某些外部变量只限于被本文件引用。这时可以在定义外部变量时加一个static声明。 file1.c static int A; int main ( ) { …… } file2.c extern A; void fun (int n) { …… A=A*n; …… } 只能用于本文件 本文件仍然不能用 用static 声明一个变量的作用是: (1) 对局部变量用static声明,把它分配在静态存储区,该变量在整个程序执行期间不释放,其所分配的空间始终存在。 (2) 对全局变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。 存储类别小结 对一个数据的定义,需要指定两种属性: 数据类型和存储类别,分别使用两个关键字 例如: static int a;  auto char c;  register int d; 可以用extern声明已定义的外部变量 例如: extern b; 注意:用auto、register、static声明变量时,是在定义变量的基础上加上这些关键字,而不能单独使用。 (1)从作用域角度分,有局部变量和全局变量。它们采用的存储类别如下: 按作用域角度分 局部变量 全局变量 自动变量 静态局部变量 寄存器变量 静态外部变量 外部变量 (2)从变量存在的时间区分,有动态存储和静态存储两种类型。静态存储是程序整个运行时间都存在,而动态存储则是在调用函数时临时分配单元 按生存期分 动态存储 静态存储 按作用域角度分 局部变量 全局变量 自动变量 静态局部变量 寄存器变量 静态外部变量 外部变量 (3) 关于作用域和生存期的概念 对一个变量的属性可以从两个方面分析: 作用域:如果一个变量在某个文件或函数范围内是有效的,就称该范围为该变量的作用域 生存期:如果一个变量值在某一时刻是存在的,则认为这一时刻属于该变量的生存期 作用域是从空间的角度,生存期是从时间的角度 二者有联系但不是同一回事 int a; int main( ) { …f2( );…f1( );… } void f1( ) { auto int b; … f2( ); … } void f2( ) { static int c; …… } a的作用域 b的作用域 c的作用域 文件file1.c a生存期 b生存期 c生存期 main f2 f1

文档评论(0)

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

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档