首页 > 其他分享 >指针

指针

时间:2023-02-15 15:55:21浏览次数:29  
标签:end 变量 s2 var 类型 指针

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

(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

相关文章

  • springboot在test的时候,new的类报空指针
    ok@ComponentpublicclassFifthGithubCrawler{@AutowiredprivateKBComponentVersionRepositoryversionRepository;/***导出所有数据到json......
  • c++函数指针
    函数的地址是存储其机器语言代码的内存的开始地址。通常,这些地址对用户而言,既不重要,也没有什么用处,但对程序而言,却很有用。例如,可以编写将另一个函数的地址作为参数的函数。......
  • linux内核之指针打印函数
    linux内核打印函数:define_netdev_printk_level(netdev_info,KERN_INFO);netdev_info:输入形参,指针函数;实际使用方法: ......
  • C经典 关于一维数组指针
    说明:1)一维数组指针表示方法int*p=a而非int*p=&a也可int*p=&a[0]表示2)p+1或a+1表示的是指向下一个地址#include<stdio.h>intmain(intargc,const......
  • C经典 二级指针
    用图说明事例代码#include<stdio.h>intmain(intargc,constchar*argv[]){//inta=5;int*p1=&a;//-打印地址-----地址相同---------------p......
  • C经典 一维数组指针解析
    #include<stdio.h>intmain(intargc,constchar*argv[]){//inta[]={1,2,3,4};int*pa[]={&a[0],&a[1],&a[2],&a[3]};printf("*pa[0]=%d\n",*pa......
  • List.addAll()报空指针异常的问题
    问题代码:List<User>user=null; 在使用List的addAll方法的时候,如果被添加的对象是null,就会报空指针异常,原因是只在栈中有引用而在堆中没有分配到内存空间改为:Li......
  • C语言学习笔记(七): 指针的使用
    函数的定义形参和实参在定义函数时函数名后面括号中的变量名称为“形式参数”(简称“形参”)或“虚拟参数”。在主调函数中调用一个函数时,函数名后面括号中的参数称为“......
  • *(*(p + 2) + 1) 二维数组指针位移
    ......
  • 顺序循环队列(只设尾指针和所含元素个数)
    问题引入:假设以一维数组elem[0…m-1]存储循环队列的元素,同时设变量rear和quelen分别指示循环队列中队尾元素的位置和队列中所含元素个数。(1)说明该队列特点(2)给出......