指针

指针也就是内存地址指针变量是用来存放内存地址的变量

(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;
posted @   德琪  阅读(77)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示