指针变量及基本使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十章指针变量及基本使用
[内容提要]
1.了解pascal 语言中静态存储、动态存储的概念以及它们在存储过程中的不同点;
2.掌握指针类型及指针变量的定义和使用方法;
3.掌握指针变量的基本操作;
4.掌握线性表、线性链表的基本概念以及线性链表建立方法;
5.掌握线性链表、循环链表、双向链表的基本操作;
6.能够应用线性链表解决一些综合实际问题;
7.为学习数据结构知识打下基础。
[重点难点]
1.重点:指针概念和基本操作
线性链表的基本概念和对线性链表的操作
能够用线性链表操作的算法思想解决实际问题。
2.难点:指针变量与静态变量的区别、使用方法
灵活运用线性链接表的思想解决实际问题,线性链表的存储与访问。
3.关键:理解指针变量的意义及基本操作,线性链表的概念及基本操作
[内容讲授]
一、静态存贮和动态存贮
1、静态存储:变量一经说明,计算机管理系统就在内存中分配相应的存贮单元,其中变量名是存贮单元的地址,而变量的值是存贮单元的内容,该存贮单元自始至终都被该变量所占用,直到程序结束。如果变量是局部变量,那么在它的作用域内,一经说明也占有一定的存贮单元,直到退出其作用域为止。这样的变量,在程序的执行过程中,不能随时使用随时分配存贮空间,也不能在程序执行的过程中,释放这些空间。也就是说,一旦给这些变量分配存贮空间,无论程序是否需要,它们都要占用一定的存贮空间,以便给用户存贮数据。我们称具有这样特点的存贮为静态存贮,它所对应的变量称为静态变量。如字符类型、数组类型、记录类型等,这类变量的特点是存贮方便,查找容易。
2、动态存贮:在程序执行过程中,通过向计算机申请存贮空间或释放存贮空间的命令,以达到动态管理计算机的存贮空间,保证存贮空间的充分利用。存贮空间可以随时申请、随时释放,这样的存贮方式称为动态存贮,其变量称为动态变量。指针变量即为动态变量。
二、指针类型与指针变量
1、指针类型定义
type
指针类型标识符=^基类型名;
其中基类型名是前面我们所学过的数据类型,但不能是文件类型。
如:
type
POINT=^integer;
CH=^char ;
var
P1, P2, P3 : POINT ;
H1, H2 : CH ;
这里的 POINT , CH 是指针类型名,即指针类型标识符,而等号右边的“^”符号是指针类型的特征,它必不可少,表示所定义的类型是指针类型。在上面的例子中,P1, P2 , P3 是 POINT类型的变量,它指向一个整型数的存贮单元,而CH指针变量指向一个字符型的存贮单元。
也可以用如下方式表示:
var
P1, P2, P3 : ^integer ;
H1, H2 : ^char ;
可以用指针变量,指向一个记录型地址,如:
type
POINT =^SSS ;
SSS = record
NAME : STRING [ 8 ];
SEX : [ FALSE , TURE ]
end;
var
P1, P2 : POINT ;
在这里POINT 指向一个记录类型的存贮单元,该记录类型由NAME 域和SEX域组成。这儿的POINT 可以是尚未定义的标识符,即可以先使用后定义,但对记录类型来说是先定义,后使用。PASCAL 语句允许指针变量可以先使用后定义,而其它类型变量则不可以。
2、指针变量的使用方法
(1) 申请存贮单元的过程:
NEW (指针变量)
如:NEW (H1)
(2)释放动态存贮单元
当用户不再需要H1所指向的存贮单元时,可以通过调用DISPOSE过程来释放该存贮单元,其方法是:
DISPOSE ( H1 )
当执行该过程时,H1 所指向的存贮单元就被释放,归还给计算机,可另作它用,此时的变量H1 的值变成无定义。
3、指针变量的赋值和操作
(1)赋值操作
利用NEW 过程,可以给一个指针变量赋予存贮单元的地址值,而引用该存储单元的操
作是(设P为指针变量)
P^
用 P^表示 P 所指的存贮单元, P^:=数据;表示给该单元所赋的值,P 和 P^的关系如图1所示:
地址存贮单元
图 1
语句P^:=' a ';即将字符'a'存放到P 所指的存贮单元P^中。
又如:type
classes=^students;
students=record
name : string [ 8 ];
num : 1..100;
link : classes ;
end;
var
clas1 , clas2 : classes ;
通过执行NEW ( clas1 ) ; NEW ( clas2 )过程则:
计算机开辟了两个 students 记录类型的存贮空间,分别由 clas1 , clas2指向这两个记录,记录中的数据域可用:
clas1^.name , clas1^.num , clas1^.link 及
clas2^.name , clas2^.num , clas2^.link 表示,
它们的存贮结构如下:
^.name
^.num
^.link
^.name
^.num
^.link
图 2
假设两个学生的姓名分别是 : " li.ming " 和" wang.ping", 他们的成绩是90 和 80 , clas1^.link 指向 clas2 ,其存贮形式如上图。