指针也就是内存地址,指针变量是用来存放内存地址的变量
(1)指针变量的声明
指针类型声明的一般格式为:
Type
指针类型名=^类型;
New过程创建一个新的动态变量,并把指针P指向这个新创建的变量。分配的内存大小由P指针表示的类型决定。
type
Tr= ^Integer;
P1= ^Real;
BytePtr= ^Byte;
StudentInfo= Record
Name:String[10];
Age:Integer;
Scores:Real;
end;
//StuPtr是指向记录类型StudentInfo的指针类型
StuPtr =^ StudentInfo;
//对于定义好的指针类型可以进行指针变量的声明,例如:
var
BP:Byteptr;
WP:StuPtx;
//为了简化程序,也可以把类型的声明和变量的声明合并在一起。例如:
var
BP:^Btye;
(2)指针变量的赋值
方法1:指针变量赋值的格式如下;
<指针变量名>:= @<标识符>
其中,“@”操作符是个一元操作符,用于获取操作数的内存地址,后面的操作数可以是变量、过程和函数等。
方法2:New过程和Dispose过程:
New(<指针变量名>);
当程序不再需要使用动态变量时,就调用标准过程Dispose删除New所创建的动态变量,并释放所分配的内存单元。调用Dispose过程的格式如下:
Dispose(<指针变量名>);
var
P:^integer;
begin
New(p);
P^:=10;
Dispose(p);
end;
方法3:GeMem过程和FreeMem过程
标准过程GetMem用于为动态变量申请一块指定大小的内存区域,并把该区域的起始地址赋给指针变量。调用GetMem过程的格式如下:
GetMem(<指针变量名>,<区域大小>)
如果程序不再需要使用动态变量时,就调用标准过程FreeMem删除GetMer创建的动态变量,并释放所分配的内存单元。调用FreeMem过程的格式如下:
FreeMem(<指针变量名>);
var
P:PChar;
i:Integer;
begin
GetMem(p,1000);
if p<>nil then begin
for i:= 0 to 999 do begin
P[i]:=Char(i):
end;
end;
FreeMem(p);
end;
综合例子:
var
s1,s2:^string;
s3:string;
begin
new(s1);
new(s2);
s1^:= 'MingRiSoft';
s2^:= 'kaihongliu';
s1:= s2; //s2的地址&001110赋给s1
s2^:= 'Welcome You !';
s3:= New Memory';
s2:= @s3; //s3的地址&011111赋给s2
s1^:=s2^; //s2所指的内容'NewMemory'赋到s1里面
s3:= 'Is right';
end;
(3)无类型指针变量
无类型指针是指指针变量在声明时没有指明基类型,无类型指针在声明中只使用Pointer,其声明格式如下:
var
<指针变量名>:Pointer;
无类型指针的作用是它可以指向任何类型,即指针pAnyPoint可以指向任何变量类型。例如
var
L,M: integer;
N: real;
pAnyPoint: Pointer;
Pt: ^Integer;
begin
pAnyPoint:= @N; //PanyPoint指向实型变量
M:=100;
pAnyPoint:= @M; //PanyPoint指向整型变量
Pt:= Tpinte(panyPoint);//将Pointer类型指针转换成Tpinte类型指针
L:= Pt^;
end;
(4)字符指针类型
字符指针类型即Pchar数据类型,是一个指向以NULL字符结尾的字符串的指针
var
P:Pchar;
begin
P:= 'Hello world';
end;
标签:end,变量,s2,var,类型,指针
From: https://www.cnblogs.com/DQ-MINE/p/17123336.html