网站大量收购独家精品文档,联系QQ:2885784924

11指针和动态结构.ppt

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
11指针和动态结构

程序设计Pascal编程 之指针和动态结构 静态变量和动态变量 静态变量:系统依据程序说明部分获得变量名和类型信息,即为变量分配对应大小的存储空间,在程序执行过程中,各变量对应的存储空间始终存在且保持不变,这些变量均称为静态变量。 动态变量:在程序执行过程中可以动态产生或撤消,所使用的存储空间也随之动态地分配或回收。 PASCAL系统提供了指针类型,用指针变量(静态变量)来指示动态变量(存储地址变量)。 一、指针的定义 说明指针类型的格式为: 指针名:^基类型; 例如,下列说明:   type pointer=^Integer; var p1,p2:pointer; 也可这样说明: var p1,p2:^Integer; pascal规定所有类型都必须先定义后使用,但只有在定义指针类型时可以例外,如下 列定义是合法的:   type pointer=^rec;       rec=record          a:integer;          b:char; c:pointer;         end; var p1,p2:pointer; 二、指针的操作 开辟动态存储单元 New(指针变量) 释放动态存储单元 dispose(指针变量) 动态存储单元的引用: 指针变量^ 内存单元示意图 Var p: ^integer; i: integer; Begin new(p); P^:=4; i:=P^; …… dispose(p); End. 4 二、指针的操作 1.具有同一基类型的指针变量之间相互赋值 var p1,p2,p3:^integer;   begin    New(P1) ; New(P2); New(P3);    P1:=P2; P2:=P3;   end; 2.可以给指针变量赋nil值 nil是关键字,它表示指针的值为“空”。 p1:=ni1后,p1的值是有定义的,但p1不指向任何存储单元。 3. 指针变量可以进行相等或不相等的比较。 大多数比较是在指针变量与nil之间进行,经常做为循环的条件。 练习: 输入两个整数,交换后值以后输出。 试一试:用普通变量编写这个程序。 这个程序还可这样来写 Program Exam11_0; type pon= ^ integer; {pon为指针类型} var a,b,c: pon; {a,b,c为指针变量} begin new(a ); new(b ); new(c ); {开辟动态存储单元} readln(a^,b^); {给a,b指向的存储单元赋值} c:=a; a:=b; b:=c; {交换存储单元的指针} writeln(a=:8, a ^ , ‘b=:8, b ^ ); {输出a,b所指单元的值} dispose(a);dispose(b);dispose(c); readln End. 三、动态存储分配之链表 设有一批整数12,56,45,86,77 ,…如何存放呢? 用数组?可以,但是在使用数组前必须确定数组元素的个数。如果把数组定义得大了,就会有大量空闲存储单元,定义得小了,又会在运行中发生下标越界的错误,这是静态存储分配的局限性。 指针类型可以构造一个简单而实用的动态存储分配结构――链表结构 ,结构示意图如下: 结点。是什么类型 ? 这里的地址是假想的 头指针 nil 表头 表尾 后继 结点 (一)链表的基本结构 链表中的每个结点至少应该包含两个域;一是数据域,一是指针域。因此,每个结点都是一个记录类型,指针的基类型也正是这个记录类型。因此,head可以这样定义: type pointer=^ rec;   rec=record       data:integer;       next:pointer;     end; var head:pointer 链表和数组 相邻结点的地址不一定是连续的。整个链表是通过指针来顺序访问的,一旦失去了一个指针值,后面的元素将全部丢失。 与数组结构相比,

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档