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

C语言程序设计(第二版) 教学课件 作者 王曙燕 chap7 函数.ppt

C语言程序设计(第二版) 教学课件 作者 王曙燕 chap7 函数.ppt

  1. 1、本文档共81页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.静态变量(static类别) 除形参外,局部变量和全局变量都可以定义为静态变量。 局部静态变量(或称内部静态变量) 全局静态变量(或称外部静态变量) 静态变量 静态变量 static int a; main( ) { float x,y; … } f( ) { static int b=1; …… } 全局静态变量 局部静态变量 自动变量 不能省 ⑴ 内存分配 编译时,将其分配在内存的静态存储区中,程序运行结束释放该单元。 ⑵ 静态变量的初值 若定义时未赋初值,在编译时,系统自动赋初值为0;若定义时赋初值,则仅在编译时赋初值一次,程序运行后不再给变量赋初值 。 ⑶ 生存期 整个程序的执行期间。 ⑷ 作用域 局部静态变量的作用域是它所在的函数或分程序.全局静态变量的作用域是从定义处开始到本源文件结束。 静态变量 int n=1; func() { static int a=2; a+=2; ++n; printf(func:n=%d a=%d\n,n,a); } main() { static int a; /*静态局部变量初始化为0*/ printf(main:n=%d a=%d\n,n,a); func(); a+=10; printf(main:n=%d a=%d\n,n,a); func(); printf(main:n=%d a=%d\n,n,a); } 运行结果: main:n=1 a=0 func: n=2 a=4 main:n=2 a=10 func: n=3 a=6 main:n=3 a=10 int c; static int a; main( ) { float x,y; … } char s; f( ) { static int b=1; …… } 3.外部变量(extern类别) 在函数外定义的变量若没有用 static说明,则是外部变量。外部变量只能隐式定义为extern类别,不能显式定义。 全局静态变量 自动变量 局部静态变量 外部变量 ⑴ 内存分配 编译时,将其分配在静态存储区,程序运行结束释放该单元。 ⑵ 变量的初值 若定义变量时未赋初值,在编译时,系统自动赋初值为0。 ⑶ 生存期 整个程序的执行期间。 ⑷ 作用域 从定义处开始到本源文件结束。 此外,还可以用extern进行声明,以使其作用域扩大到该程序的其它文件中。 外部变量 问题:全局静态变量的作用域可以扩展到本程序的其它文件吗? 外部变量声明的一般格式 extern 数据类型 变量名1,…,变量名n; 或 extern 变量名1,…,变量名n; 注意: ①外部变量声明用关键字extern,而外部变量的定义不能用extern,只能隐式定义。 ②定义外部变量时,系统要给变量分配存储空间,而对外部变量声明时,系统不分配存储空间,只是让编译系统知道该变量是一个已经定义过的外部变量,与函数声明的作用类似。 4.寄存器变量(register类别) 只有函数内定义的变量或形参可以定义为寄存器变量。寄存器变量的值保存在CPU的寄存器中。 受寄存器长度的限制,寄存器变量只能是char、int和指针类型的变量。 main( ) { long int sum=0; register int i; for (i=1; i=1000; i++) sum+=i; printf(sum=%ld\n ,sum); } 程序输出结果: sum=500500 归纳变量的分类 1.按照变量的作用域对变量分类 ⑴ 局部变量 ⑵ 全局变量 2.按照变量的生存期对变量分类 ⑴ 静态存储变量 包括:局部静态变量和全局静态变量 ⑵ 动态存储变量 包括:自动变量 综合实例一: int i=10; void main() { int i=1; printf(%d\t,i); { int i=2; printf(%d\t,i); { extern i; i+=1; printf(%d\t,i); } printf(%d\t, ++i); } printf(%d\n,++i); } 输出结果: 1 2 11 3 2 综合实例二: int a=10

文档评论(0)

带头大哥 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档