指针变量及基本使用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 ,其存贮形式如上图。

相关文档
最新文档