- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
这类变量不能在执行时随时分配存贮单元.doc
第十一章 指针
在这以前,程序中所用的各种类型的全程变量一经说明,就在内存中占有固定不变的存贮单元,一直保持到程序结束;而各种类型的局部变量在其作用域内一经说明也占有固定不变的存贮单元,直至退出作用域为止,这类变量不能在执行时随时分配存贮单元,也不能在不使用时将已占用的存贮单元释放掉,因而称为静态变量。静态变量在其存贮分配时具有一定局限性,例如程序中使用的数组必须一开始在说明时确定元素个数,如果数组定义太大,会浪费存贮空间,定义太小,则又会出现下标越界的错误。
Pascal提供了一种称为指针的类型,在程序执行时,通过指针实现动态存贮的目的。
第一节 动态变量
一、定义指针类型
在Pascal中,指针变量中存放的某个存贮单元的地址,即指针变量指向某个存贮单元。一个指针变量仅能指向某一种类型的存贮单元,这种数据类型是在指针类型的定义中确定的,称为指针类型的基类型。指针类型定义形式如下:
类型名=基类型名;
例如: type intepter=^integer;
var p,q,r:intepter;
说明intepter是一指向整型存贮单元的指针类型,其中“^”为指针符。p,q,r均定义为指针变量,分别可以指向一个整型存贮单元。
上例也可定义为:
var p,q,r:^integer;
指针也可指向有结构的存贮单元,例如:
type person=record
name:string[10];
sex:(male,female);
age:20..60
end;
var pts:^person;
pts为指向记录类型person的指针变量。
二、动态变量
引用一个指针指向的动态存贮单元即动态变量的形式如下:
指针变量名^
例如: p^、q^、r^等等。
指针变量p与它所指示的动态变量p^之间的关系可用下图表示:
p p^
以下语句可把整数5存放到p所指向的动态变量p^中去:
p^:=5;
下列语句则可把p所指向的p^中的值赋给整型变量i中去:
i:=p^;
如果指针变量p并未指向任何存贮单元,则可用下列赋值语句:
p:=Nil;
其中Nil是Pascal保留字,表示“空”的意思,为唯一的一个指针类型常量。
对动态变量的操作
一、动态变量的建立和撤消
在Pascal程序中,动态变量不能由var定义而是通过调用标准过程new建立的。过程形式为:
new(指针变量名);
如果有下列变量定义语句:
var p:^integer;
仅说明了p是一个指向整型变量单元的指针变量,但这个整型单元并不存在,在指针变量p中尚没有具体的地址值。在程序中必须通过过程调用语句:
new(p);
才在内存中分配了一个整型变量单元,并把这个单元的地址放在变量p中,一个指针变量只能存放一个地址。在同一时间内一个指针只能指向一个变量单元。当程序再次执行new(p)时,又在内存中新建立了一个整型变量单元,并把新单元的地址存放在p中,从而丢失了老的变量单元的地址。
为了节省内存空间,对于一些已不使用的现有动态变量,应该使用标准过程dispose予以释放。过程形式为:
dispose(指针变量名);
为new(指针变量名)的逆过程,其作用是释放由指针变量所指向的动态变量的存贮单元。
例如在用了new(p)后再调用dispose(p),则指针p所指向的动态变量被撤消,内存空间归还Pascal系统可作它用,这时p的值为Nil。
二、程序举例
例11-1 输入两个整数,要求先打印大数后打印小数的方式输出。
program ex11_1;
type intepter=^integer;
var p1,p2: intepter;
procedure swap(var q1,q2: intepter);
var p: inte
文档评论(0)