- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
pascal-针与链表
指针与链表
前面介绍的各种简单类型的数据和构造类型的数据属于静态数据。在程序中,这些类型的变量一经说明,就在内存中占有固定的存储单元,直到该程序结束。 程序设计中,使用静态数据结构可以解决不少实际问题,但也有不便之处。如建立一个大小未定的姓名表,随时要在姓名表中插入或删除一个或几个数据。而用新的数据类型──指针类型。通过指针变量,可以在程序的执行过程中动态地建立变量,它的个数不再受限制,可方便地高效地增加或删除若干数据。
一、指针的定义及操作 (一)指针类型和指针变量 在pascal中,指针变量(也称动态变量)存放某个存储单元的地址;也就是说, 指示某个存储单元。 指针类型的格式为:^基类型: ①一个指针只能指示某一种类型数据的存储单元,这种数据类型就是指针的基类型。基类型可以是除指针、文件外的所有类型。例如,下列说明: type pointer=^Integer; var p1,p2:pointer; 定义了两个指针变量p1和p2,这两个指针可以指示一个整型存储单元(即p1、p2 )。var区直接定义指针型变量。var a:^real; b:^boolean; 又如:type person=record name:string[20]; sex:(male,female); age:1..100 end; var pts:^person; ③pascal规定所有类型都必须先定义后使用,但只有在定义指针类型时可以例外,如下 type pointer=^rec; rec=record a:integer; b:char end; (二)开辟和释放动态存储单元 1、开辟动态存储单元pascal中,指针变量的值一般是通过系统分配的,开辟一个动态存储单元必须调用标 new。new过程的调用的一般格式:New(指针变量)储单元的地址赋给指针变量。 说明:①这实际上是给指针变量赋初值的基本方法。例如,设有说明:var p:^Integer;这只定义了P是一个指示整型存储单元的指针变量,但这个单元尚未开辟,或者说P中尚未有值(某存储单元的首地址)。当程序中执行了语句new(p)才给p赋值,即在内存中开辟(分配)一个整型变量存储单元,并把此单元的地址放在变量p中。示意如下图:
(a)编译时给 (b)执行New(p)后 (c)(b)的简略表示p分配空间 生成新单元?表示值不定 XXXX 内存单元示意图
②一个指针变量只能存放一个地址。如再一次执行New(p)语句,将在内存中开辟另外一个新的整型变量存储单元,并把此新单元的地址放在p中,从而丢失了原存储单元的地址。Dispose释放该存储单元。 dispose语句的一般格式:dispose(指针变量) (三)动态存储单元的引用 在给一个指针变量赋以某存储单元的地址后,就可以使用这个存储单元。 引用动态存储单元一般格式:<指针变量>^ 说明:①在用New过程给指针变量开辟了一个它所指向的存储单元后,要使用此存储单元的唯一方法是利用该指针。 例1 设有下列说明: var p:^integer; i:integer; 画出执行下列操作后的内存示意图: New(p); P^:=4;i:=p^; 解: 如下图所示。 (a)编译时 (b)执行New语句 (c)执行P^:=4 (d)执行i:=P^ 单元 内存单元示意图
(四)对指针变量的操作 前已述及,对指针所指向的变量(如P^)可以进行指针的基类型所允许的 全部操作。对指针变量本身,除可用New、Dispose过程外,尚允许下列操作: 例2 设有下列说明与程序段: var p1,p2,p3:^integer; begin New(P1) ; New(P2); New(P3); P1:=P2; P2:=P3; end; 2、可以给指针变量赋nil值nil是PASCAL的关键字,它表示指针的值为空。例如,执行:p1:=ni1后,p1的值是有定义的,但p1不指向任何存储单元。3、可以对指针变量进行相等或不相等的比较运算nil之间进行相等(=)或不相等(<>=的比较,比较的结果为布尔量。4.需要注意之处 1、P与P^的区别 P是指向该动态变量的指针变量名,P^则称为动态变量或标志变量。P的值是P^的首地址,P^的
您可能关注的文档
- NSE高一英语一学期BOOK 2 M4 教案.doc
- office_010安全模式启动问题.docx
- OP0001W类专用吸附棉片和3M价格.docx
- OP0001W类专用吸附棉片和吸附垫价格.docx
- Oracle 0g for redhat Linux5安装部署手册.docx
- Oracle 发器详解_2011-8-31.doc
- ORACLE1+RAC+ASM安装全过程(linux).doc
- oracle1g redhat6.0完整安装版.docx
- Oracle_nterprise_Linux_6.4_X86安装Oracle11gR2_RAC详细文档.doc
- ORACLE备&恢复案例.doc.doc
- 2025年智能快递驿站行业政策与市场机遇报告.docx
- 2025年校园安全防范中新能源电动巡逻车采购可行性分析.docx
- 2025年智能垃圾分类智慧监管平台在智慧旅游区的应用前景研究.docx
- 2025年智能家居报告:人工智能伦理风险的法律责任与用户隐私保护.docx
- 2025年智能垃圾分类与垃圾分类信息化管理结合的可行性研究.docx
- 2025年智慧社区远程医疗诊断中心在基层医疗机构运营管理中的应用报告.docx
- 2025年智慧社区:老年活动广场智能化升级研究.docx
- 2025年智能社区新能源电动巡逻车市场应用前景分析报告.docx
- 2025年智能垃圾分类智慧监管平台在垃圾分类回收与处理中的智能化改造路径.docx
- 2025年本土半导体材料产业链国产化战略布局报告.docx
文档评论(0)