- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
pascal第8章 指针和链表
第八章 指针与链表; 前面介绍的各种简单类型的数据和构造类型的数据属于静态数据。在程序中,这些类型的变量一经说明,就在内存中占有固定的存储单元,直到该程序结束。
程序设计中,使用静态数据结构可以解决不少实际问题,但也有不便之处。如建立一个大小未定的姓名表,随时要在姓名表中插入或删除一个或几个数据。而用新的数据类型──指针类型。通过指针变量,可以在程序的执行过程中动态地建立变量,它的个数不再受限制,可方便高效地增加或删除若干数据,这比修改一个记录数组更加方便。;指针的定义及操作 ; ③ Pascal规定所有类型都必须先定义后使用,但只有在定义指针类型时可以例外,如下列定义是合法的: type pointer=^rec; //允许rec类型后定义
rec=record
a : integer;
b : char
end;
(2)开辟和释放动态存储单元
① 开辟动态存储单元
在Pascal中,指针变量的值一般是通过系统分配的,开辟一个动态存储单元必须调用标准过程new。
new过程调用的一般格式: new(指针变量)
功能:开辟一个存储单元,此单元能存放的数据的类型正好是指针的基类型,并把此存储单元的地址赋给指针变量。;说明:1) 这实际上是给指针变量赋初值的基本方法。例如,设有说明:var p : ^integer;
这只定义了P是一个指示整型存储单元的指针变量,但这个单元尚未开辟,或者说P中尚未有值(某存储单元的首地址)。当程序中执行了语句new(p)才给p赋值,即在内存中开辟(分配)一个整型变量存储单元,并把此单元的地址放在变量p中。示意如下图:; ② 释放动态存储单元
dispose语句的一般格式:dispose(指针变量)
功能:释放指针所指向的存储单元,使指针变量的值无定义。例如:
new(p);
dispose(p);
(3)动态存储单元的引用
在给一个指针变量赋以某存储单元的地址后,就可以使用这个存储单元。
引用动态存储单元一般格式:<指针变量>^
说明:
①在用New过程给指针变量开辟了一个它所指向的存储单元后,要使用此存储单元的唯一方法是利用该指针。
②对动态存储单元所能进行的操作是该类型(指针的基类型)所允许的全部操作。;例8.1 设有下列说明:
Var
p : ^integer;
i : integer;
画出执行下列操作后的内存示意图:
New(p); P^ : =4; i : =p^;
【分析】 如下图所示。;(4)对指针变量的操作
前已述及,对指针所指向的变量(如P^)可以进行指针的基类型所允许的全部操作。对指针变量本身,除可用New、Dispose过程外,尚允许下列操作:
① 具有同一基类型的指针变量之间相互赋值
例8.2 设有下列说明与程序段 :
var p1,p2,p3 : ^integer;
begin
new(p1);
new(p2);
new(p3);
p1 : =p2; //同一基类型的指针变量之间可以相互赋值
p2 : =p3;
end;;② 可以给指针变量赋nil值
nil是Pascal的关键字,它表示指针的值为空。例如,执行:
p1 : =ni1后,p1的值是有定义的,但p1不指向任何存储单元。
③ 可以对指针变量进行相等或不相等的比较运算
在实际应用中,通常可以在指针变量之间,或指针变量与nil之间进行相等(=)或不相等()的比较,比较的结果为布尔值。;例8.3 输入两个整数,按从小到大打印出来。
【分析】 不用指针类型可以很方便地编程,但为了示例指针的用法,我们利用指针类型。定义一个过程swap用以交换两个指针的值。
程序如下:
Type pointer=^integer;
var p1,p2 : pointer;
procedure swap(var q1,q2 : pointer);
var q : pointer;
begin
q : =q1;
q1 : =q2;
q2 : =q;
end;
BEGIN
new(p1);
new(p2);
readln(p1^,p2^);
if p1^p2^ then swap(p1,p2);
writel
您可能关注的文档
- DC_DC自举升压电路.doc
- DC-DC升压电路原理和应用(完整).doc
- delphi中对象其实也是一种指针.doc
- DEM建立和应用.doc
- DIRECTX中独占模式和窗口模式切换档.doc
- diskgenius误删除或误格式化后文件恢复教程.doc
- Discuz x2.5 DIY首页静态调用头像不显示解决办法.doc
- DIY大型鱼缸程序和注意事项.doc
- D115.天体与卫星运行.ppt
- DMZ部署和配置.doc
- 8 黄山奇石(第二课时)课件(共22张PPT).pptx
- 22《纸船和风筝》教学课件(共31张PPT).pptx
- 17 松鼠 课件(共23张PPT).pptx
- 23《海底世界》课件(共28张PPT).pptx
- 21《大自然的声音》课件(共18张PPT).pptx
- 第12课《词四首——江城子 密州出猎》课件 2025—2026学年统编版语文九年级下册.pptx
- 第2课《济南的冬天》课件(共42张PPT) 2024—2025学年统编版语文七年级上册.pptx
- 17 跳水 第二课时 课件(共18张PPT).pptx
- 第六单元课外古诗词诵读《过松源晨炊漆公、约客》课件 统编版语文七年级下册.pptx
- 统编版六年级语文上册 22《文言文二则》课件(共27张PPT).pptx
原创力文档


文档评论(0)