Object Pascal语言中的“指针类型”

Pascal语言的数据类型 在Pascal中,程序员可以根据需要定义新的数据类型,从而提高程序的可读性和可维护性。通过type关键字,可以创建新的数据类型。pascaltype// 自定义整型```pascaltypeend;varbeginend.```Pascal语言的数据类型多样而灵活,从基本的数据类型到复杂的结构数据类型,提供了丰富的选择,使得程序员能够高效地组织和管理数据。理解这些数据类型的特性与用法,可以帮助程序员设计出更加合理和高效的程序。 阅读详情
⒈指针类型的声明
指针类型的声明

指针类型在任何语言中都是比较难理解也是比较灵活的一种数据类型,指针通常是它所指的变量的内存地址。

声明指针类型的语法如下:

Type 指针类型标识符=^基类型;

程序示例如下:

Type
 BytePtr=^Byte;
 WordPtr=^Word;

上例中,声明了两个指针类型,一个是bytePtr,指向byte类型的数据,另一个是WordPtr,指向word类型的数据。

Object pascal不表示基类型一定要是在前面已声明的,也可以只是一个标识符,然后在同一个块内声明基类型。

声明了指针类型之后,就可以声明指针类型的变量,例如:

Var
 BP:BytePtr;
 WP:WordPtr;

为了简化程序,也可以把类型的声明和变量的声明合并在一起,例如:

Var BP:^Byte;

指针所指的基类型可以是简单类型,也可以是构造类型,例如:

Type Student=Record
 name:String;
 Age:Integer;
 Sex : (Man, Woman);
End;
Var StuPtr:^Student;

上例中,声明了一个指向记录类型Student的指针变量Studptr,以后程序中就可以用StuPtr^来表示记录类
型的Student的动态变量,要访问其中的Name字段,可以写成StuPtr^.Name。

这里介绍动态变量的概念,动态变量是这样构成的,用指针类型的变量标识符后加一个^符号,就构成指针
所指向的基类型的动态变量,像上例中的StuPtr^就是Stduent的动态变量。

(在Delphi程序中,很多程序都习惯这样声明

Type PStudent=^TStudent;
 TStudent=Record
 name:string;
 Age:Integer;
 Sex : (Man, Woman);
End;
)


⒉指针的操作
实际上前面已介绍了指针的简单用法,这里还要介绍几个用于指针操作的过程和操作符。

New是object pascal中的标准例程(System 单元声明),用于在应用程序的堆中为动态变量分配一块区域,
并把该区域的地址赋给指针变量,所分配区域的大小由指针所指的类型决定。如果应用程序的堆上已没有足
够的空间,将触发EOutOfMemory异常。

New过程的声明如下:

Procedure New(var P:Pointer);

其中P是一个指针变量,调用了New过程之后,程序就可以用p^作为指针所指类型的动态变量。

相应地,用当程序不再需要使用动态变量时,就应当调用标准例程Dispose删除New创建的动态变量,并释放
所分配的空间。

程序示例如下:

Type
 PListEntry=^TListEntry;
 TListEntry=Record
  Next:PListEntry;
  Text:string;
  count:Integer;
End;

Var
 List,P:PlistEntry;
Begin
 …
 New(P);
 P^.Next:=List;
 p^.Text:='Hello World';
 p^Count:=1;
 List:=P;
 Dispose(P);
 …
End;

上例中,首先声明了一个指针类型PListEntry,指向TListEntry类型,TListEntry类型的声明在下面,是一
个记录类型。然后声明了两个PListEntry类型的变量List和P。

Object Pascal中还有一个例程GetMem,其作用与New差不多,也是在应用程序的堆中为动态变量分配一块区
域,并把该区域的地址赋给指针变量,不同的是GetMem例程指定了要分配区域的大小,GetMem的声明如下:

Procedure GetMem(Var P:Pointer;Size:Integer);

其中P是指针变量,Size是字节数。

相应地,用GetMem创建的动态变量必须用FreeMem例程删除,并释放分配的空间。

Object Pascal语言中还有一个@操作符,用于获得操作数的地址,操作数可以是变量、过程、函数或类类型
中的方法,关于@操作符的详细介绍请参考操作
符。

Object Pascal中有一个特殊的保留字nil,这是个空指针常量,当指针的值为nil时,表示指针当前没有指
向任何动态变量。注意:您不能用值为nil的指针变
量去访问动态变量。

指针变量除了能被赋值以外,还能进行相等或不相等的比较,比较只限于类型兼容的指针变量之间。当两个
指针指向同一个对象时(不是同一个类型)指针才
相等。
 

⒊无类型指针
无类型的指针是指指针变量声明时没有有确地给出基类型,无类型的指针是这样声明的:

 Var Ptr:Pointer;

无类型指针的作用在于它可以指向任何类型,不过对于无类型的指针,您不能用类似ptr^的形式来引用它的
动态变量。
PASCAL语言编程全解电子书 在计算机科学的海洋中,PASCAL语言犹如一束光芒,在早期编程教学和软件开发领域扮演了举足轻重的角色。作为一门结构化编程语言,PASCAL的设计初衷是促进更严谨的编程习惯,并且在教育界得到了广泛应用。尽管它的光芒可能被后来的诸如C、Java等更现代的语言所遮盖,PASCAL的影响力依旧深远,它的原则和思想仍对今天编程实践产生着影响。本章节将对PASCAL语言的起源、特点、及它在现代编程教育中的地位进行简要回顾和分析。 阅读详情

相关推荐

Lazarus、Delphi、FreePascal开发进销存实例教程

可用于跨平台开发的Lazarus、Delphi、FreePascal开发进销存实例教程!!!

Free Pascal 学习笔记 第三章 数据类型 Types (未完)

一、主要有八种数据类型: 简单类型 simple tye 字符类型 string type 结构化类型 structured type 指针类型 pointer type 过程类型 procedural type 泛型类型 generic type 专用类型 specialized type 类型别名 type alias 二、基本类型 基本类型分为序数类型与实数类型两大类。 1.序数类型 ordinal types ...

sq8706的专栏 873

pascal指针、链表

关于在链表中实现插入法排序 相对于数据结构为数组的插入排序方法,现在要解决的是如何实现链表中的插入排序。数组的存储方式是顺序存储,而链表的存储方式是链式存储。所以,要实现针对链表的插入排序法,其关键是解决如何能够保证链表不发生断链的情况。

Free Pascal语言基础学习:定义变量、数据类型、循环语句、case语句、条件判断、with语句、运算符

Pascal是一种结构化编程语言,而Free Pascal作为其现代编译器,不仅支持跨多种操作系统和处理器架构,还提供了高效的内存使用和函数重载等先进功能。Free Pascal继承了Pascal语言的核心特性,同时进行了扩展和优化,使其成为教育、学术和多领域应用开发的理想工具,展示了Pascal语言的持久影响力和Free Pascal的现代化改进。

m0_73500130的博客 1863

Free pascal标准数据类型、内置函数等必备知识 

Free pascal标准数据类型、内置函数等必备知识 

poincare截点

poincare映射定义比较抽象,简单理解就是每个原始周期取一个点,表现在程序中的思路如下: 以激励的周期T0为poincare的原始周期,设置1个周期取m个点,取N个周期设置T0/m为ode45的步长,每个周期的 i*m个点处取一个点(i=0.0-1.0),把这些点画出来就行了。有几个点就是几倍周期。 (注意:ode45算法是变步长的算法,所以一定要之前自己设置步长,我在这个地方吃了很大一个亏...

小树 3007

pascal指针 c语言指针,Pascal中的指针运算指南(与C比较).doc

Pascal中的指针运算指南(与C比较)Pascal中的指针运算指南(与C比较)Pascal中的指针运算指南(与C比较)大家都认为,c语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上。因此,说指针是c语言的灵魂,一点都不为过。同时,这种说法也让很多人产生误解,似乎只有c语言的指针才能算指针。basic不支持指针,在此不论。其实,pascal语言本身也是支持指针的。从最初的pascal...

weixin_35916518的博客 370

让Claude连续写代码24小时会发生什么?揭秘长时运行”架构背后的工程逻辑与未来

AI长时运行实验揭示软件开发新范式 Claude Opus通过Harness框架24小时独立开发全栈应用的成功实验,展示了AI从辅助工具向异步协作者的进化。实验采用"上下文轮转"机制解决记忆管理难题,将任务拆解为微周期并通过文件系统同步进度。核心突破在于:1)TDD成为AI自治基石,200+测试用例确保开发不偏航;2)文件取代对话成为AI间高效沟通介质;3)开发者角色重构为需求定义和框架设计者。该实验证明,通过严谨的架构约束和验收标准,AI可完成复杂长周期任务,预示着软件开发将从手工作坊

老孙 | Ethan Sun 的博客:AI 智能体与 AI 原生软件的工程实践 1091

pascal指针

大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上。因此,说指针是C语言的灵魂,一点都不为过。同时,这种说法也让很多人产生误解,似乎只有C语言的指针才能算指针。Basic不支持指针,在此不论。其实,Pascal语言本身也是支持指针的。从最初的Pascal发展至今的Object Pascal,可以说在指针运用上,丝毫不会逊色于C语言的指针。     以下内容分为八个部分,分

裸奔的蜗牛的专栏 3399

GB28181协议心跳机制:从标准解读到代码实现的保活策略

本文深入解析GB28181协议中的心跳机制,从标准解读到代码实现,详细介绍了保活策略的核心价值和底层逻辑。通过实战案例和技术要点,帮助开发者优化心跳间隔、超时次数等参数配置,提升安防监控系统的可靠性和性能。文章还提供了代码实现的防坑指南和特殊场景处理建议,适用于各类网络环境下的设备在线状态管理。

weixin_29611239的博客 105

奥顺居PHP测算引流SEO程序_八字风水_起名解梦_星座生肖综合门户源码

奥顺居PHP测算引流SEO程序_八字风水_起名解梦_星座生肖综合门户源码 S30新框架适合多种奥顺插件。

xl1407的博客 1751

pascal 指针 讲解

指  针 指针的动态变量       1.定义指针类型     在Turbo Pascal中,指针变量中存放的某个存储单元的地址,即指针变量指向某个存储单元。一个指针变量仅能指向某一种类型的存储单元,这种数据类型是在指针类型的定义中确定的,称为指针类型的基类型。指针类型定义如下:          类型名=^基类型名;       例如:type q=^integer;

zz_ylolita 3819

quartus 13.1常见报错解决方法

在使用quartus中会遇到很多由于安装或设置不规范造成的错误。我就目前我遇到的一些错误以及我的解决方法分享给大家,这个文章将会持续更新,如果读者有遇到软件中错误无法解决的问题,也欢迎在评论区留言。 一、编译出现lience错误 在对设计的电路编译时,系统在程序运行3秒内即结束并报错,大概意思为现有的证书不支持编译。这个常见问题源自破解不成功,这里读者很有可能犯的错误是在使用破解器的时候没有区分x86(即32-bit)和x64软件破解器对应的文件夹。 如图所示有两种破解器,分别对应32位和64位的软件,大部

肥宅的博客 3万+

(delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)

​ 指针是 Object Pascal 语言的另一种基本数据类型。一些面向对象的语言在很大程度上隐藏了指针这种强大但危险的语言结构,而 Object Pascal 则允许程序员在需要时使用指针(一般情况下并不经常使用)。​ 那么什么是指针,这个名字又从何而来呢?与大多数其他数据类型不同的是,指针并不保存实际值,而是保存对变量的间接引用,而变量反过来又有一个值。一种更专业的表述方式是,指针类型定义了一个变量,该变量持有给定数据类型(或未定义类型)的另一个变量的内存地址。

langfengyl的专栏 1509

Python教程:一文了解Python的深拷贝与浅拷贝

理解 Python 中的深拷贝(deep copy)和浅拷贝(shallow copy)是非常重要的,特别是在处理嵌套结构的数据时。让我们深入探讨这两个概念,并通过代码示例进行说明。

旦莫的博客 3967

2026华为OD面试手撕代码真题目录

一般面试的时候每一轮技术面都会出一到两个手撕代码题,这些题的特点就是,非常短小,易于理解。不可能会再出阅读理解一样的机试题的。但是这些题目也非常注意基本功,很注意细节的处理,一般都是easy+medium题目。但是大家一定要注意,因为大部分面试官上面一开始就会让你做题,直接看你所有的做题过程(防止有人水平一般,机试就网上找的答案的蒙混过关),手撕代码题会给你后面的面试定一个基调。

MISAYAONE的博客 9万+

浅谈Object Pascal的指针

    大家都认为,C语言之所以强大,以及其自

木头人专栏 634

鸿蒙ArkUI内部API10以及11开发,输入框唤起输入法键盘,页面会被顶起的解决办法

鸿蒙ArkUI内部API10以及11开发,输入框唤起输入法键盘,页面会被顶起的解决办法

zmx781284440的博客 3214

对Object Pascal的指针的一些总结

核心提示:Pascal语言本身也是支持指针的。从最初的Pascal发展至今 的Object Pascal,可以说在指针运用上,丝毫不会逊色于C语言的指针。... 大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上。因此,说指针是C语言的灵魂,一点都不为过。同时,这种说法也让很多人 产生误解,似乎只有C语言的指针才能算指针。Basic不支持指针,在此不论。其实...

204

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

c语言中的指针类型属于原子类型吗,在高级语言(如C或 PASCAL)中,指针类型是原子类型还是?为什么?...

满意答案yzod869792013.03.11采纳率:54%等级:12已帮助:18765人pascal语言中指针类型和动态数据结构 整型、实型、布尔型等各种简单类型和数组、记录、集合等各种结构类型的数据都属于静态类型的数据。所谓静态类型数据是指使用前必须在程序的说明部分给出描述这种数据的类型说明(TYPE语句)或变量说明(VAR语句),以定义这类数据占用内存空间的大小规模,使系统在程序的编...

weixin_34239861的博客 1743

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Object Pascal语言

                                  Object Pascal语言   控制串由一个或多个控制字符组成,由“#”开头,后面紧跟一个范围在0~255的无符号的整数,用于代表相应的ASCII字符。  下面再列出一些变量声明的例子:var X, Y, Z: Double;I, J, K: Integer;Digit: 0..9C: Color; Done, Error:

.NET&Delphi小站----编程技术的乐园 2630

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

pascal指针 c语言指针,pascal指针 - Pascal教程

指针Pascal中的指针简单易学.使用指针可以更轻松地执行某些Pascal编程任务,并且在不使用指针的情况下无法执行其他任务(如动态内存分配).所以有必要学习指向成为一个完美的Pascal程序员.让我们从简单而简单的步骤开始学习它们.如您所知,每个变量都是一个内存位置,每个内存位置都定义了地址,可以使用指针变量的名称进行访问,表示内存中的地址.指针是什么?指针是一个动态变量,其值是另一个变量的地址...

weixin_36295500的博客 651

Object Pascal 概要——指针类型

  指针类型声明:    type      指针类型名 = ^基类型;  指针变量声明:    var      指针变量名: 指针类型名;  直接声明指针变量:    var      指针变量名: ^基类型;  每个指针都需要用New分配空间,当应用程序的堆上没有足够的空间时,将触发EOutOfMemory异常。不再使用的指针需要用Dispose释放空间。  nil指针是空指针,不能用它来访

石子资料库 1063
上一篇: Delphi、C/C++、Visual Basic数据类型的对照
下一篇: CMPP SP端 C# 实例
thinkray
博客等级 码龄22年 0粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值