E7ABA0名词的空间域时间域和物理存储位置课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《E7ABA0名词的空间域时间域和物理存储位置课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- E7ABA0 名词 空间 时间 物理 存储 位置 课件
- 资源描述:
-
1、空间域空间域:一个类型或量值,从程序的什么位置到什一个类型或量值,从程序的什么位置到什么位置是有效的,是可以引用的,是占据内存么位置是有效的,是可以引用的,是占据内存的。的。时间域时间域:一个类型或量值,在程序执行过程中,从一个类型或量值,在程序执行过程中,从什么时刻开始到什么时刻是占据内存的。什么时刻开始到什么时刻是占据内存的。第第6章名词的空间域、时间域和物理存储位置章名词的空间域、时间域和物理存储位置 名词的空间域和时间域不完全一致名词的空间域和时间域不完全一致。有空间域的类型或量值,一定有时间域。有空间域的类型或量值,一定有时间域。即在程即在程序的某位置可以访问的类型或量值,此时一定序
2、的某位置可以访问的类型或量值,此时一定占据内存;占据内存;有时间域的类型或量值,不一定有空间域。有时间域的类型或量值,不一定有空间域。即有即有的时候,程序执行到某个位置,某个类型或量的时候,程序执行到某个位置,某个类型或量值虽然占据内存,但无法访问,即在该位置不值虽然占据内存,但无法访问,即在该位置不可见。可见。6.1 C/C+程序的逻辑结构程序的逻辑结构程序从小到大可分为如下逻辑单位:程序从小到大可分为如下逻辑单位:语句(语句(statementstatement):分号结束分号结束 2.2.模块(模块(blockblock):一对花括号括起的若干语句。一对花括号括起的若干语句。3.3.嵌套
3、模块嵌套模块:1.1.多对花括号的嵌套。多对花括号的嵌套。4.4.文件(文件(filefile):程序的存盘单位。文件中通常包含多个模块(或嵌程序的存盘单位。文件中通常包含多个模块(或嵌套模块),每个模块内包含多个语句。套模块),每个模块内包含多个语句。5.5.工程(工程(projectproject):工程是功能单位,是对多个文件进行组织和管理的工程是功能单位,是对多个文件进行组织和管理的框架。同一个工程内的文件之间可以交换数据,共享框架。同一个工程内的文件之间可以交换数据,共享函数。函数。6.6.工作区(工作区(workspaceworkspace):工作区是工作区是VC+VC+最大的开发
4、单位,是对多个工程进行最大的开发单位,是对多个工程进行组织和管理的框架。一个工作区内的多个工程应该是组织和管理的框架。一个工作区内的多个工程应该是相关的。不同工程间可以共享文件。相关的。不同工程间可以共享文件。图6.1 C/C+程序逻辑结构6.2名词性的类型和量值在各逻辑结构上的空间域名词性的类型和量值在各逻辑结构上的空间域 6.2.16.2.1模块域模块域模块模块 是空间作用域的最小范围。是空间作用域的最小范围。缺省情况下,定义在模块内(一对花括号内)缺省情况下,定义在模块内(一对花括号内)的类型和量值,其有效范围是从定义位置到本的类型和量值,其有效范围是从定义位置到本模块结束。出本模块右花
5、括号后,该类型或量模块结束。出本模块右花括号后,该类型或量值因为释放内存空间而失效,无法访问。值因为释放内存空间而失效,无法访问。例例6.1 量值模块作用域的验证量值模块作用域的验证#include int fun(int x)void main()int a=10;int b;printf(a=%dn,a);b=fun(a);printf(a=%d,b=%dn,a,b);调用调用fun函数,函数,a(10)为实参)为实参fun函数的声明函数的声明int fun(int x)int a=20;printf(a=%d,x=%dn,a,x);return a+x;fun内定义的内定义的a只在只在f
6、un内有效内有效返回返回a+x的值的值(20+10)a=10a=20,x=10a=10,b=30Press any key to continuemain()中的输出中的输出fun()中的输出中的输出main()中的输出中的输出例例6.1 量值模块作用域的验证量值模块作用域的验证#include int fun(int x)void main()int a=10;int b;printf(a=%dn,a);b=fun(a);printf(a=%d,b=%dn,a,b);printf(“x=%dn,x);调用调用fun函数,函数,a(10)为实参)为实参fun函数的声明函数的声明编译出错:编译出
7、错:error C2065:x:undeclared identifierint fun(int x)int a=20;printf(a=%d,x=%dn,a,x);printf(b=%dn,b);return a+x;fun内定义的内定义的a只在只在fun内有效内有效返回返回a+x的值的值(20+10)编译出错:编译出错:error C2065:b:undeclared identifier例例6.2 类型模块作用域的验证类型模块作用域的验证#include Person fun();Person fun()struct Person int id;char name10;ZS=1,张三张三
8、;return ZS;void main()Person LiSi;LiSi=fun();fun内定义的类型内定义的类型Person,只在只在fun内有效内有效在在main函数内声明一个在函数内声明一个在fun函数内定义的函数内定义的Person类型的变类型的变量量LiSi,编译出错,编译出错声明声明Person类型的类型的变量变量ZS,并赋值并赋值例例6.2 类型模块作用域的验证类型模块作用域的验证#include struct Person int id;char name10;Person fun();void main()Person LiSi;LiSi=fun();printf(id
9、=%dn,LiSi.id);printf(name=%sn,LiSi.name);Person fun()Person ZS=1,张三张三;return ZS;id=1name=张三Press any key to continue6.2.26.2.2嵌套模块的层域嵌套模块的层域 当一个模块内嵌套另一个模块时,定义在内层模当一个模块内嵌套另一个模块时,定义在内层模块的类型和量值的空域就是内层模块;块的类型和量值的空域就是内层模块;定义在外层模块内的类型和量值的空域是外层模定义在外层模块内的类型和量值的空域是外层模块,当然涵盖内存模块,即在内层模块内可以引用定块,当然涵盖内存模块,即在内层模块内
10、可以引用定义在外层模块内的类型和量值。义在外层模块内的类型和量值。当内层模块内定义了和外层模块内同名的类型和当内层模块内定义了和外层模块内同名的类型和量值时,量值时,内层的类型和量值覆盖了外层模块的同名类内层的类型和量值覆盖了外层模块的同名类型和量值,型和量值,导致只能引用内层中定义的部分。导致只能引用内层中定义的部分。例例6.3 嵌套模块中的同名类型或量值的空间域嵌套模块中的同名类型或量值的空间域#include void main()struct Person int id;char name10;struct Date int year;int month;int day;main函数内
11、(外层模块)函数内(外层模块)定义的定义的Person类型类型main函数内(外层模块)函数内(外层模块)定义的定义的Date类型类型Person ZS;/内嵌模块开始内嵌模块开始struct Person int id;char name10;int Class;Person LiSi;Date Birthday;printf(sizeof(LiSi)=%dn,sizeof(LiSi);/内嵌模块结束内嵌模块结束printf(sizeof(ZS)=%dn,sizeof(ZS);printf(%d,sizeof(LiSi);声明外层模块定义的声明外层模块定义的Person类型的变量类型的变量Z
12、S内、外层定义了同名的内、外层定义了同名的Person类型,类型,LiSi是内层是内层的的Person类型的变量类型的变量内层模块定义的同名内层模块定义的同名Person类型,成员不同类型,成员不同声明外层模块定义的声明外层模块定义的Date类型的变量类型的变量Birthday,外,外层定义,内层可见层定义,内层可见在内层输出内层在内层输出内层Person类类型变量型变量LiSi的大小的大小在外层输出外层在外层输出外层Person类型变量类型变量ZS的大小的大小在外层输出内层在外层输出内层Person类型变量类型变量LiSi的大小,编译出错的大小,编译出错sizeof(LiSi)=20size
13、of(ZS)=16Press any key to continue6.2.36.2.3文件域文件域程序的所有代码都是写在文件中的。程序的所有代码都是写在文件中的。用用C/CC/C编写程序,最少要有一个文件。编写程序,最少要有一个文件。在文件内定义的类型或量值(在文件内定义的类型或量值(注意:不包含在任何模注意:不包含在任何模块中,而是直接定义在文件中块中,而是直接定义在文件中)的空间域是从定义位)的空间域是从定义位置开始,到本文件的结束。本文件内,在定义该类型置开始,到本文件的结束。本文件内,在定义该类型或量值后面的或量值后面的任何模块内或模块外任何模块内或模块外,都可以引用该类,都可以引用
14、该类型或量值。型或量值。类型只能定义在前,引用在后类型只能定义在前,引用在后。变量变量通常通常定义在前,引用在后。定义在前,引用在后。变量如果定义在后,引用在先,必须在引用前明确用变量如果定义在后,引用在先,必须在引用前明确用关键字关键字externextern声明。声明。例例6.4 文件中定义的类型或量值的空间域文件中定义的类型或量值的空间域#includestruct Person int id;char name10;int i;定义在文件中定义在文件中的的Person类型类型定义在文件中定义在文件中的的int型变量型变量ivoid main()Person ZS=1,张三张三;i=10
15、;printf(i=%dn,i);printf(“id=%d name=%sn,ZS.id,ZS.name);在在main函数的外层模块函数的外层模块中声明一个中声明一个Person类型类型的变量的变量ZS,并赋值,并赋值在在main函数的内层模块中函数的内层模块中引用整型变量引用整型变量i,并赋值,并赋值i=10id=1 name=张三Press any key to continue一个编译出错的示例程序一个编译出错的示例程序:程序中,将程序中,将Person类型的定义写在文件类型的定义写在文件的后端的后端,而文件前端的而文件前端的main函数模块内函数模块内,引用了后面才定义的引用了后面
16、才定义的Person类型。程序编类型。程序编译出错。译出错。#includeint i;void main()Person ZS=1,张三张三;i=10;printf(i=%d,i);printf(%d%sn,ZS.id,ZS.name);struct Person int id;char name10;在在main函数的外层模块中函数的外层模块中声明一个定义在文件后面声明一个定义在文件后面的的Person类型的变量类型的变量ZS,并赋值。编译出错并赋值。编译出错定义在文件后面的定义在文件后面的Person类型类型用用extern声明定义在后的变量的情况。声明定义在后的变量的情况。例例6.6
17、变量的先声明,再应用,而后定义变量的先声明,再应用,而后定义#include#includestruct Person int id;char name10;定义在文件前面的定义在文件前面的Person类型类型void main()extern int i;i=10;extern Person ZS;ZS.id=1;strcpy(ZS.name,张三张三);printf(i=%dn,i);printf(“id=%d name=%sn,ZS.id,ZS.name);Person ZS;int i;定义在文件后面的变量定义在文件后面的变量i,ZS声明在文件后面定义的变量声明在文件后面定义的变量i声
18、明在文件后面定义的变量声明在文件后面定义的变量ZSi=10id=1 name=张三Press any key to continue#include#includestruct Person int id;char name10;void main()Person ZS=1,张三张三;int i=10;printf(i=%dn,i);printf(%d%sn,ZS.id,ZS.name);extern int j;j=200;printf(“j=%dn,j);int j;出错出错原因原因:”定义在后,重定义在后,重新声明,然后引用新声明,然后引用”的的规则模块外(文件内)规则模块外(文件内)的
19、全局变量在模块内引的全局变量在模块内引用的规则,不能应用于用的规则,不能应用于模块内声明的局部变量。模块内声明的局部变量。注意注意:”定义在后,重定义在后,重新声明,然后引用新声明,然后引用”的的规则不适合类型,只适规则不适合类型,只适合变量。合变量。6.2.46.2.4工程域工程域工程中可以有多个文件工程中可以有多个文件每个文件中可以有多个全局的类型、全局的量值和全每个文件中可以有多个全局的类型、全局的量值和全局的函数模块局的函数模块函数模块内可以有多个局部的类型和局部的量值。函数模块内可以有多个局部的类型和局部的量值。局部的类型和量值的空间域限制在它所在的模块,不局部的类型和量值的空间域限
展开阅读全文