- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
pascal编程:指针(point)
指 针 静态存储与动态存储 我们知道使用变量前必须首先在变量说明部分对变量进行定义。变量一经定义,编译时系统就会给这些变量分配相应的内存空间。这种分配称为静态存储分配,各变量相应的内容空间在程序运行前就已经确定。 在实际应用中,经常遇到事先无法确定有多少数据要存储的情况,此时就不能用静态存储。为此,pascal引入了动态存储分配机制。 所谓动态存储分配是指事先不确定数据存储,在程序运行过程中根据实际需要动态申请所需存储空间,用完后及时将存储空间归还给系统。 内存中的每一个存储单元都有一个编号,也就是“地址”。存储单元中存放的是各种类型的数据,也就是存储单元的“内容”。一个存储单元的“内容”的写入或读出,是根据存储单元的“地址”进行。 在计算机中,“地址”实际上是一个特殊的整数,因此“地址”可以看成是一种特殊的“内容”,可以存储到另一个存储单元中。这样两个存储单元之间就建立了一种联系。 下图,变量a是一个存储地址的变量,其自身的地址是2000;变量b是一个存储整数的变量,其地址是2020;可以将2020存储到a中,从而a和b建立了关系。同时,2020相对于a而言是“内容”,相对b而言则是“地址”。为了清楚表达a和b的关系,左图用右图代替,即在a中不再给出b的具体“地址”,而是从a的内部画一个箭头指向b,该箭头像一根针,所以称为指针。 指针实际上是“地址”,相应地,存储指针的变量称为指针变量,指针箭头所指存储变量存储的数据的类型称为指针变量的基类型。 相对静态存储分配,动态存储分配有两个特点: ⑴可以在运行时根据需要随用随要; ⑵每次所申请的存储单元在内存中可以不连续,通过指针相互建立联系。 指针变量及基本使用 指针变量定义 为了表示指针变量和它所指向的变量之间的联系,在pascal语言中使用了“∧”表示指向。有两种说明方法: 方法一:首先进行指针类型标示符的定义,其次是进行指针变量的定义。 Type 指针类型标示符=∧ 基类型标示符; 这里的基类型可以是我们所学的除文件类型以外的任何数据类型。Pascal规定,指针类型的定义应写在前面,指针所指向的基类型的类型定义应放在后面。 指针变量的定义形式如下: Var 指针变量名:指针类型标示符; 如: Type point=∧integer; Var p1,p2:point; 说明:point是指针类型标示符,经定义后,程序中就出现了一个名字叫point的数据类型,该类型的变量用于其存储整数类型变量的地址,也即该类型变量的内容是一个指针,指向一个整型变量。 P1,p2是point类型的变量,它们的值都是某个存储单元的地址,该地址中可以存储整型数据。 方法二:可以再var区中直接定义,即: Var 指针变量名:∧基类型标示符; 因此,上表的说明也可以写为: Var p1,p2:∧integer; 总之,指针是用来实现动态存储分配的数据类型。指针变量的值是内存中某一个存储单元的地址,该地址单元中的值类型是指针变量的基类型。指针变量的基类型可以是除文件类型以外的其它数据类型。 定义指针变量的方法有两种,要分清指针类型标示符和指针变量名。 指针变量本身是静态分配的,只说明它可以存储一个地址,但在程序运行前,其应该存储哪一个地址并没有确定,必须等到程序运行时根据申请到的地址来填写。从而实现动态的数据组织要求。 指针变量的基本使用方法 由于指针变量的内容(一个存储单元地址)是动态赋值的,我们事先不知道确切的地址,所以我们必须在需要时向系统提出申请,由系统给我们分配一个存储单元,然后获得该存储单元的确切地址,并将其填写到指针变量中。当不再需要某一存储单元时,就必须将该存储单元空间还给系统,我们称之为释放。 Pascal语言中规定了两个标准过程来实现存储单元空间的申请和释放。 1.申请存储单元的过程:new(指针变量); new(h); 说明:系统将自动分配一个存放数据的存储单元,将该单元的地址赋给指针变量h。存储单元的大小由h的基类型决定。 new(h);h∧:=123;new(h);h∧:=234;(实现过程如下所示) 2.释放存储单元的过程:dispose(指针变量); dispose(h); 系统收回指针变量h所指的内存单元,此时指针变量h所指的内存单元的值不可用,即指针变量h变成确切指向。 3.指针变量的赋值和操作 利用new过程可以给一个指针变量赋予存储单元的地址值,这个地址值我们不需要了解,我们关心的是该指针变量所指的存储单元的内容。假设指针变量用p表示,pascal用p∧来表示指针变量p所指的存储单元的内容。对于p和p∧我们都可以用赋值语句来实现,只是效果不大相同。前者赋给的是地址,后者赋给的
文档评论(0)