欢迎来到天天文库
浏览记录
ID:11146461
大小:94.00 KB
页数:11页
时间:2018-07-10
《pascal-指针与链表》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、指针与链表前面介绍的各种简单类型的数据和构造类型的数据属于静态数据。在程序中,这些类型的变量一经说明,就在内存中占有固定的存储单元,直到该程序结束。 程序设计中,使用静态数据结构可以解决不少实际问题,但也有不便之处。如建立一个大小未定的姓名表,随时要在姓名表中插入或删除一个或几个数据。而用新的数据类型──指针类型。通过指针变量,可以在程序的执行过程中动态地建立变量,它的个数不再受限制,可方便地高效地增加或删除若干数据。一、指针的定义及操作 (一)指针类型和指针变量 在pascal中,指针变量(也称动态变量)存放某个存储单元的地址;也
2、就是说,指针变量指示某个存储单元。 指针类型的格式为:^基类型 说明:①一个指针只能指示某一种类型数据的存储单元,这种数据类型就是指针的基类型。基类型可以是除指针、文件外的所有类型。例如,下列说明: typepointer=^Integer; varp1,p2:pointer; 定义了两个指针变量p1和p2,这两个指针可以指示一个整型存储单元(即p1、p2中存放的是某存储单元的地址,而该存储单元恰好能存放一个整型数据)。 ②和其它类型变量一样,也可以在var区直接定义指针型变量。 例如:vara:^real;b:
3、^boolean; 又如:typeperson=record name:string[20]; sex:(male,female); age:1..100 end; varpts:^person; ③pascal规定所有类型都必须先定义后使用,但只有在定义指针类型时可以例外,如下列定义是合法的: typepointer=^rec; rec=record a:integer; b:char end;
4、 (二)开辟和释放动态存储单元 1、开辟动态存储单元 在pascal中,指针变量的值一般是通过系统分配的,开辟一个动态存储单元必须调用标准过程new。 new过程的调用的一般格式: New(指针变量) 功能:开辟一个存储单元,此单元能存放的数据的类型正好是指针的基类型,并把此存储单元的地址赋给指针变量。 说明:①这实际上是给指针变量赋初值的基本方法。例如,设有说明:varp:^Integer;这只定义了P是一个指示整型存储单元的指针变量,但这个单元尚未开辟,或者说P中尚未有值(某存储单元的首地址)。当程序中执行了语句new(p
5、)才给p赋值,即在内存中开辟(分配)一个整型变量存储单元,并把此单元的地址放在变量p中。示意如下图: (a)编译时给 (b)执行New(p)后 (c)(b)的简略表示 p分配空间 生成新单元 ?表示值不定 新单元的地址为XXXX 内存单元示意图②一个指针变量只能存放一个地址。如再一次执行New(p)语句,将在内存中开辟另外一个新的整型变量存储单元,并把此新单元的地址放在p中,从而丢失了原存储单元的地址。 ③当不再使用p当前所指的存储单元时,可以通过标准过程Dispose释放该存储单元。 ⒉释放动态存储单元
6、 dispose语句的一般格式:dispose(指针变量) 功能:释放指针所指向的存储单元,使指针变量的值无定义。 (三)动态存储单元的引用 在给一个指针变量赋以某存储单元的地址后,就可以使用这个存储单元。 引用动态存储单元一般格式:<指针变量>^ 说明:①在用New过程给指针变量开辟了一个它所指向的存储单元后,要使用此存储单元的唯一方法是利用该指针。 ②对动态存储单元所能进行的操作是该类型(指针的基类型)所允许的全部操作。 例1设有下列说明: varp:^integer;i:integer; 画出执行下列操作后的内存
7、示意图: New(p);P^:=4;i:=p^; 解:如下图所示。 (a)编译时(b)执行New语句 (c)执行P^:=4 (d)执行i:=P^ 分配存储 单元 内存单元示意图(四)对指针变量的操作 前已述及,对指针所指向的变量(如P^)可以进行指针的基类型所允许的 全部操作。对指针变量本身,除可用New、Dispose过程外,尚允许下列操作: ⒈具有同一基类型的指针变量之间相互赋值 例2设有下列说明与程序段: varp1,p2,p3:^integer; beg
8、in New(P1);New(P2);New(P3); P1:=P2;P2:=P3; end; 2、可以给指针变量赋nil值 nil是PASCAL的关键字,它表示指针的值为"空"。
此文档下载收益归作者所有