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

第12章c局部变量与全局变量.ppt

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

第12章 C语言中用户标识符的作用域和存储类 在C语言中,标识符必须先定义后使用。 定义语句应该放在什么位置?定义了的标识符是否随处可用? ————作用域 经过赋值的变量是否在程序运行期间总能保存其值? ————生存期 12.1 局部变量、全局变量和存储分类 C语言中所有的变量都有自己的作用域。变量说明的位置不同,其作用域也不同,据此将C语言中的变量分为局部变量和全局变量。 局部变量和全局变量及其作用域 定义:在函数内或复合语句内定义的变量 说明: 局部变量只在定义它的函数内或复合语句中有效 不同函数中同名变量,占不同内存单元 形参属于局部变量 全局变量---外部变量 定义:在函数外定义,可为本文件所有函数共用 有效范围: 从定义变量的位置开始到本源文件结束 若全局变量与局部变量同名,则全局变量被屏蔽 通常情况下,全局变量名的第一个字母用大写的形式 变量的生存期 变量的生存期 变量值在内存中占据存储空间的时间。 变量的存储类别 变量定义语句的完整形式 12.2局部变量及其作用域和生存期 2.register变量 说明:也是自动类变量,与auto变量的区别是将变量的值保存在CPU的寄存器中,而不是放在内存单元中;在程序运行时,访问寄存器要比内存快得多。 作用:对于使用频繁的变量,定义为寄存器变量,不必从内存而是直接从寄存器中取出参加运算,提高程序执行效率。 3. 静态存储类的局部变量 用static来说明局部变量时,该变量为静态局部变量。 如:f( ) { static int b=1; ……} 静态局部变量的作用域与auto、register类变量一样,但与后两者的区别为: 该类型变量对应的存储单元被分配在内存的静态存储区。其生存期将一直延长到程序运行结束。 其初值是在编译时赋予的,不是在程序执行期间赋予;对未赋初值的静态局部变量,编译程序自动给与初值0. 练习 #includestdio.h f(int a) {static int c; a=c++;return(a); } main() {int a=2,i,k=0; for(i=0;i2;i++)k+=f(a); printf(“%d\n”,k); } 12.3 全局变量及其作用域和生存期 全局变量只有静态类别属性。 对于全局变量可使用extern和static 两种说明符。 注意: 如果我们定义了一个全局变量,它前面某个函数又要使用它时,要在这个函数中加一个说明。 应尽量少使用全局变量,因为: 全局变量在程序的全部执行过程中占用了存储单元 降低了程序的通用性、可靠性和可移植性 降低了程序的清晰性,容易出错 静态变量(static类别) 除形参外,局部变量和全局变量都可以定义为静态变量。 变量存储类型小结: 由于全局变量的存在,使得子函数中的i有机会将值带回,使得只进行了一次调用 ⑴ 内存分配 调用函数或执行分程序时在动态存储区为其分配存储单元,函数或分程序执行结束,所占内存空间即刻释放。 ⑵ 变量的初值 定义变量时若没赋初值,变量的初值不确定;如果赋初值则每次函数被调用时执行一次赋值操作。 ⑶ 生存期 在函数或分程序执行期间。 ⑷ 作用域 自动变量所在的函数内或分程序内。 ⑴ 内存分配 编译时,将其分配在内存的静态存储区中,程序运行结束释放该单元。 ⑵ 静态变量的初值 若定义时未赋初值,在编译时,系统自动赋初值为0;若定义时赋初值,则仅在编译时赋初值一次,程序运行后不再给变量赋初值 。 ⑶ 生存期 整个程序的执行期间。 ⑷ 作用域 局部静态变量的作用域是它所在的函数或分程序。全局静态变量的作用域是从定义处开始到本源文件结束 * * float f1(int a) { int b,c; ……. } char f2(int x,int y) { int i,j; …… } main() { int m,n; ……. } a,b,c有效 x,y,i,j有效 m,n有效 例 不同函数中同名变量 main() { int a,b; a=3; b=4; printf(main:a=%d,b=%d\n,a,b); sub(); printf(main:a=%d,b=%d\n,a,b); } sub() { int a,b; a=6; b=7; printf(sub:a=%d,b=%d\n,a,b); } 例 复合语句中变量 #define

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档