(1)指针类型定义的语法
type
<指针类型标识符>:“<基类型>;
指针把指向动态变量的类型由“^,’符后基类型来标识,同时也由‰,’符号表明这里定义的是一个指针类型。
例2.9 定义一个学生记录的指针类型变量。
type
student=record
name:String[8];
number:Integer;
sex:(male,female);
age:Integer;
end;
per:“student;
Var
1 ^
P上,p么:per;
^ 0
r: char:
在上例中,per是记录指针类型,变量pl、p2被定义成指针类型变量,是指向记录型的动态变量;r指针变量是指向字符型动态变量。
(2)指针的使用
指针经常在以下情况使用:被赋值,作等或不等的关系运算,用以访问动态变量,作为参数。
特别要注意的是,指针变量在使用前要用new过程申请动态变量的存储单元,使用完后,要用dispose过程释放动态变量的存储单元。new和dispose过程使用的语法格式是:
new(指针变量);
dispose(指针变量);
2.指针变量的操作
两个类型不一致的指针变量是不允许相互赋值的。此外,指针变量只允许“=’’与tt<>,,两种关系运算。指针的关系运算通常用来检测一个指针变量是否为空指针。
看下面这段代码说明指针变量的功能:
type
buffer:String[255];
ptr=“buffer;
Var
bl:buffer;
b2:ptr;
这里,b l和b2的功能完全相同,都代表一个最长可达255 B的字符串。不同的仅表现在占用
内存的方法上。b l是静态分配的内存空间,b2则是动态分配的内存空间,即在程序中要使用new过程才可分得内存空间。看如下两条语句:47
变量
b l:=’zhang’;
b2“:
’zhang’;
在b2的后面有一个“^,’符号,这是指针变量的访问方法。例如可把它的值传递给同类型的b l:=b2“;
在这里,要注意b2和b2“的区别。b2是一个4 B的指针变量,而b2“则是一个256 B的字符串变量。前者是静态的,存放的是动态变量的内存首地址;后者是的数据。可对例2.9进一步作如下的编程:
type
pstu:“student;
student.--record
name
:String[8];
动态的,
存放的是动态变量中
number:1..1 00;
sex:(female,male,);
age:Integer;
end;
Var
list,peopy t pstu;
begin
new(1ist);
list“.name::’wang’;
list“.number::1 5;
list“.sex:=female;
list“.age:=1 9;
pcopy:=list;
if pcopy“.sex=male then SS:=’male’
else if pcopy“.sex=female then SS:=’female’;
writeln(’name:’,pcopy“.name,’number’,pcopy“.number,sex:’,ss,’age:’,pcopy“.age);
readln;
dist (1ist)dispose list;
I :
end;
在定义了指针变
函数是
new
量后,系统并未为其分配内存,可使用标准函数new为其分配内存.dispose函数的逆过程,通过使用new函数获得的内存空间必须使用dispose函数来释放。