- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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等。 ●寄存器变量必须是
                您可能关注的文档
最近下载
- 姜黄栽培技术ppt课件.pptx VIP
- 2024年北师大版八年级上册教学设计第四章4.4 一次函数的应用.docx VIP
- 5C培训模拟试题及其答案解析,重症医学专科资质培训班模拟考试.docx VIP
- 2024年中国农业银行招聘考试笔试试题.docx VIP
- 公共营养的资料.pptx VIP
- 2025入党考试题库(附答案).pdf VIP
- 新课标人教版六年级上册数学第三单元测验试题.pdf VIP
- 党纪学习教育:《中国共产党党员网络行为规定》解读PPT.pptx VIP
- 2025年新能源汽车市场消费者购车决策影响因素及品牌满意度调查报告.docx
- 十八项医疗核心制度(最新) .pdf VIP
 原创力文档
原创力文档 
                        

文档评论(0)