(C-课件)4章-变量作用域第(函数2)讲解.ppt

时间:2023-1-9 作者:791650988

(GPS)第五章-GPS定位基本原理课件.ppt

第五章 GPS定位基本原理,1,第五章 GPS定位基本原理,教学内容GPS定位原理GPS测量定位的类型;伪距法测量;载波相位测量;周跳的探测与修复;,绝对定位;相对定位;差分GPS.美国GPS政策,2,5.1 GPS定位概述,第三颗卫星所确,

《(C-课件)4章-变量作用域第(函数2)讲解.ppt》由会员分享,可在线阅读,更多相关《(C-课件)4章-变量作用域第(函数2)讲解.ppt(25页珍藏版)》请在上搜索。

1、4.3 全局变量和局部变量,4.3.1 变量的存储机制与C+的内存布局,4.3.2 全局变量,4.3.3 局部变量,4.3.1 变量的存储机制与C+的内存布局,自由存储区(动态数据),操作系统为一个C+程序的运行所分配的内存分为四个区域,如图4.3 所示:,存储区域说明:(1)代码区(Code area):存放程序代码,即程序中各个函数的代码块;(2)全局数据区(Data area):存放全局数据和静态数据;分配该区时内存全部清零,结果变量的所有字节等效初始化为全。(3)栈区(Stack area):存放局部变量,如函数中的变量等;分配栈区时不处理内存,即变量取随机值。(4)自由存储区(Fre

2、e store area):存放与指针相关的动态数据。分配自由存储区时不处理内存。,4.3.1 变量的存储机制与C+的内存布局,4.3.2 全局变量,在所有函数之外定义的变量称为全局变量。,全局变量存放在全局数据区,因编译器自动将该区清为全0,如果用户在定义时不显式给出初始化值,则等效初始化为全0。,全局变量可定义在程序开头,也可定义在中间位置,该全局变量在定义处之后的任何位置都是可以访问的,称为可见的。,【例4.5】多个函数使用全局变量的例子。,全局变量引入:,4.3.2 全局变量【例4.5】,打印200,调用func(),函数func(),200*2=400,打印400,n=100,n=1

3、00*2=200,【例4.5】多个函数使用全局变量的例子。int n=100;void func()n*=2;int main()n*=2;coutnendl;func();coutnendl;return 0;,4.3.3 局部变量,定义在函数内或块内的变量称为局部变量。,程序中使用的绝大多数变量都是局部变量。,局部变量在程序运行到它所在的块时建立在栈中,该块执行完毕局部变量占有的空间即被释放。故亦称为自动变量。,局部变量在定义时可加修饰词auto,但通常省略。局部变量在定义时若未初始化,其值为随机数。,局部变量引入:,【例4.6】使用局部变量的例子。,4.3.3 局部变量,打印main()

4、中的t=4.5,调用fun(),函数fun(),打印fun()中的t=5,打印main()中的t=4.5,t=5,【例4.6】使用局部变量的例子。void fun()auto int t=5;/fun()中的局部变量,auto可省略coutfun()中的t=tendl;int main()float t=4.5;/main()函数中的局部变量coutmain()中的t=tendl;fun();coutmain()中的t=tendl;return 0;,4.4 函数调用机制,局部变量占用的内存是在程序执行过程中“动态”地建立和释放的。这种“动态”是通过栈由系统自动管理进行的。,(1)建立栈空间;

5、,(6)恢复现场:取主调函数运行状态及返回地址,释放栈空间;,(7)继续主调函数后续语句。,(5)释放被调函数中局部变量占用的栈空间;,(4)执行被调函数函数体;,(3)为被调函数中的局部变量分配空间,完成参数传递;,(2)保护现场:主调函数运行状态和返回地址入栈;,调用过程:,4.4 函数调用机制,void fun1(int,int);void fun2(float);int main()int x=1;y=2;fun1(x,y);return o;void fun1(int a,int b)float x=3;fun2(x);void fun2(float y)int x;,此图例说明在程

6、序执行过程中怎样通过栈“动态”地建立和释放局部变量占用的内存的,4.5 作用域与标识符的可见性,3 文件域,2 函数声明域,作用域:指标识符能够被使用的范围。只有在作用域内标识符才可以被访问(称为可见)。,本节重点讨论局部域和文件域(全局域),其中局部域包括块域和函数声明域。任何标识符作用域的起始点均为标识符说明处。,下面分别介绍:,1 块域,函数中定义的标识符,包括形参和函数体中定义的局部变量,作用域都在该函数内,也称作函数域。,块域,块指一对大括号括起来的程序段。块中定义的标识符,作用域在块内。,复合语句是一个块。,函数也是一个块。,复合语句中定义的标识符,,作用域仅在该复合语句中。,【例4.7】输入两数,按从大到小的顺序保存。,块的引入:,块域【例4.7】,3,5,a=3 b=5,a=5 b=3,【例4.7】输入两数,按从大到小的顺序保存,并输出结果。,结果,栈,t,=3,int main()int a,b;/具有函数域 coutab;cout=a)int t;/具有块域 t=a;a=b;b=t;/交换a,b的值 couta=atb=bendl;return 0;,上述程序若在最

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:791650988@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。