Delphi 指针[2] 指针类型(Pointer types)
Delphi 指针[2] 指针类型(Pointer types)
可以使用以下语法声明指向任何类型的指针
1 | type pointerTypeName = ^ type |
定义记录或其他数据类型时,通常也会定义指向该类型的指针。这使得在不复制大内存块的情况下操作该类型的实例变得容易。
标准指针类型有很多用途。最通用的是指针,它可以指向任何类型的数据。但是指针变量不能被取消引用;将^符号放在指针变量后会导致编译错误。要访问指针变量引用的数据,请先将其强制转换为另一个指针类型,然后取消对其的引用。
1、标准指针类型(standard pointer types)
System和SysUtils单元声明了许多常用的标准指针类型。
指针类型 | 指向类型的变量 |
PAnsiString, PString | AnsiString |
PByteArray | TByteArray(在SysUtils中声明)。用于为数组访问动态分配的内存进行类型转换。 |
PCurrency, PDouble, PExtended, PSingle | Currency, Double, Extended, Single |
PInteger | Integer |
POleVariant | OleVariant |
PShortString | ShortString. 移植使用旧PString类型的旧代码时很有用。 |
PTextBuf | TTextBuf(在SysUtils中声明)。TTextBuf是TTextRec文件记录中的内部缓冲区类型。) |
PVarRec | TVarRec(在System中声明) |
PVariant | Variant |
PWideString | WideString |
PWordArray | TWordArray(在SysUtils中声明)。用于对2字节值数组的动态分配内存进行类型转换。 |
2、字符指针(Character pointers)
基本类型PAnsiChar和PWideChar分别表示指向AnsiChar和WideChar值的指针。泛型PChar表示指向Char的指针(即,在其当前实现中,指向AnsiChar)。这些字符指针用于操作以空结尾的字符串。
类型检查指针
$T编译器指令控制@运算符生成的指针值的类型。该指令采用以下形式:
1 | { $T +}或{ $T -} |
在{$T-}状态下,@运算符的结果类型始终是与所有其他指针类型兼容的非类型指针。当@应用于处于{$T+}状态的变量引用时,结果的类型为^T,其中T仅与指向变量类型的指针兼容。
关于“以空结尾的字符串”说明:
许多编程语言,包括C和C++,都缺少专用的字符串数据类型。这些语言以及使用它们构建的环境依赖于以空结尾的字符串。以nul结尾的字符串是一个以nul(#0)结尾的从零开始的字符数组;由于数组没有长度指示符,所以第一个NUL字符标记字符串的结尾。您可以在SysUtils单元中使用Delphi构造和特殊例程,以便在需要与使用它们的系统共享数据时处理以nul结尾的字符串。
例如,以下类型声明可用于存储以空结尾的字符串。
1 2 3 4 | type TIdentifier = array [ 0..15 ] of Char ; TFileName = array [ 0..259 ] of Char ; TMemoText = array [ 0..1023 ] of WideChar ; |
启用扩展语法({$X+})后,可以将字符串常量分配给静态分配的基于零的字符数组。(动态数组不适用于此目的。)如果使用比声明的数组长度短的字符串初始化数组常量,则剩余字符将设置为#0。
创建时间:2022.12.13 更新时间:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
2019-12-13 [原创] Delphi Create(Application) 和 Create(nil) 的区别