变量的作用域与生存期重点介绍.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 变量的作用域与生存期 §7.3 外部变量 ● 定义:在函数外定义 ● 作用域: (1)默认:从定义变量的位置开始到本源文件结束。 (2)扩展:到其它源文件(其它源文件须用关键字extern声明变量)。 (3)限制在本源文件:定义时加关键字static。 ● 生存期:整个程序运行期间 * * §7.1 作用域与生存期概述 ▲变量的作用域(空间特性) ● 变量的作用域也称为可见性,指变量能够被访问的范围。 ● 根据不同的作用域,变量可分为局部变量和全局变量两类。局部变量的作用范围限定在程序中的部分区域(函数、复合语句);全局变量的作用范围可以是整个文件甚至是整个程序。 ▲变量的存储类别(时间特性) 除作用域(可见性)外的另外两个特性:变量所在存储单元如何分配(存储位置) ?变量何时存在(生存期)? ——— 存储类别。 ● 变量的存放位置:RAM 或 CPU寄存器 ● 内存区域划分:代码区、静态存储区、动态存储区 ● 存储类别:静态存储、自动存储 ● 静态存储方式:存放在静态存储区,编译时就分配确定的相对位置,程序调入内存时即分配了固定的内存单元(静态分配)生存期为整个程序的运行过程。 ● 自动存储方式:存放在动态存储区(栈区),临时分配。生存期仅在函数或复合语句(调用)执行期间。 ▲ 定义变量的声明格式决定了存储类别,进而决定了变量的生存期;而该定义变量的声明位置(内部/外部)则决定了变量的作用域 . ▲内部变量 ※定义:在函数内或复合语句内定义,只在本函数内或复合语句内有效。 ※说明: ●main中定义的变量只在main中有效; ●不同函数中同名变量,占不同内存单元; ●形参属于内部变量; ●分为自动变量、寄存器变量和静态内部变量 。 §7.2 内部变量 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有效 void sub() { int a,b; a = 6; b = 7; printf(sub:a=%d,b=%d\n,a,b); } void 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); } #define N 5 void main() { int i; int a[N] = {1,2,3,4,5}; for(i=0;iN/2;i++) { int temp; temp = a[i]; a[i] = a[N-i-1]; a[N-i-1] = temp; } for(i = 0;i N;i++) printf(%d ,a[i]); } 【例】 不同函数中同名变量 【例】 复合语句中变量 运行结果:5 4 3 2 1 运行结果: main:a=3,b=4 sub:a=6,b=7 main:a=3,b=4 ▲自动变量 ( auto ) ※格式:[auto] 类型 变量名列表; auto 可省略, auto int a; 等价于 int a; ※自动变量的生存期:自动变量存在于 RAM 中的动态存储区—“栈”,并且仅当定义它的函数或复合语句被执行时,才创建该变量,执行结束后该变量自动被删除掉,释放占用的内存空间。 ※自动变量用的最多,不会永久占用内存空间。 #include stdio.h main() { auto int a,b,c; a=1,b=2; c = add(a,b);/*创建add形参和局部变量*/ { float x = c; printf(x=%f,x); } printf(c=%d,c); } int add(int x,int y) { int z; z=x+y; return (z); } a,b,c有效 x,y,z有效 x有效 ▲寄存器变量(建议不使用) ※格式:register 类型 变量名列表; ※关键字register的真正作用是提醒编译程序所定义的变量在程序中使用频率较高。 ※注意: ●只有字符型、整型变量能放在寄存器中,包括:int、char、short、long等。 ●寄存器变量必须是

文档评论(0)

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

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

1亿VIP精品文档

相关文档