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

第14课(指针).ppt

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息学奥赛培训教程(第14课) 指针(动态数据类型) 动态数据类型 使用静态数据类型的变量一经说明,就在内存中占有固定的存储单元,直到该程序结束; 而用新的数据类型──指针类型。通过指针变量,可以在程序的执行过程中动态地建立变量,动态地增加或删除变量。 链表结构 设有一批整数(12,56,45,86,77,……,),如何存放呢? 当然我们可以选择以前学过的数组类型。但是,在使用数组前必须确定数组元素的个数。如果把数组定义得大了,就会有大量空闲存储单元,定义得小了,又会在运行中发生下标越界的错误,这是静态存储分配的局限性。   利用指针类型可以构造一个简单而实用的动态存储分配结构――链表结构。 * 1)先定义后说明: type pointer=^Integer; var p1,p2:pointer; 定义了指针类型pointer,pointer为指向integer的指针 (一)指针类型和指针变量 说明了两个pointer类型的指针变量 **指针变量存放某个存储单元的地址 变量p1,p2存放指向integer的存储单元的地址 2)定义和说明合在一起 var a:^real; b:^boolean; type person=record    name:string[20];    sex:(male,female);    age:1..100   end; var pts:^person; a为指针变量,存放指向real的存储单元的地址 b为指针变量,存放指向boolean的存储单元的地址 指针变量pts存放指向存放记录类型person的存储单元的地址 integer,real,boolean,person 为指针类型的基类型 设有说明:var p:^Integer; (二)开辟和释放动态存储单元 开辟一个动态存储单元必须调用标准过程new   new过程的调用的一般格式:   New(指针变量)   功能:开辟一个存储单元,此单元能存放的数据类型是指针的基类型, 并把此存储单元的地址赋给指针变量。 ①定义了P是一个指示整型存储单元的指针变量,但这个单元尚未开辟, 或者说P中尚未有值。 ②当程序中执行了语句new(p)才给p赋值,即在内存中开辟(分配)一个 整型变量存储单元,并把此单元的地址放在变量p中。 (b)执行New(p)后生成新单元 新单元的地址为XXXX 地址被赋值给p,新单元的值未定 (a)编译时给p分配空间 ?表示值未定 ③一个指针变量只能存放一个地址。如再一次执行New(p)语句,将在内存中 开辟另外一个新的整型变量存储单元,并把此新单元的地址放在p中,从而 丢失了原存储单元的地址。 ④当不再使用p当前所指的存储单元时,可以通过过程Dispose释放该存储单元 例如:dispose(p); ? XXXX ? p p^ (三)动态存储单元的引用 例1 设有下列说明:   var p:^integer; i:integer;   画出执行下列操作后的内存示意图:     New(p); P^:=4;i:=p^;   解: 如下图所示。   内存单元示意图 (a)编译时 (b)执行New语句 (c)执行P^:=4 (d)执行i:=P^ p为指针类型的变量:指针变量;存放地址; ^p为指针变量p所指向的内存变量,为整数类型;存放具体的值, 可以被当作整数类型使用; (四)对指针变量的操作 ⒈具有同一基类型的指针变量之间 相互赋值 例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、可以对指针变量进行相等或不相 等的比较运算;比较的结果为布尔值。 例3 输入两个整数,按从小到大输出来。   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);    write(Input 2 data:);readln(p1^,p2^);    if p1^p2^ then swap(p1,p2);    writeln(Output 2 data:,p1^:4,p2^:4);   end.

文档评论(0)

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

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

1亿VIP精品文档

相关文档