Delphi 指针[2] 指针类型(Pointer types)
Delphi 指针[2] 指针类型(Pointer types)
可以使用以下语法声明指向任何类型的指针
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编译器指令控制@运算符生成的指针值的类型。该指令采用以下形式:
{$T+}或{$T-}
在{$T-}状态下,@运算符的结果类型始终是与所有其他指针类型兼容的非类型指针。当@应用于处于{$T+}状态的变量引用时,结果的类型为^T,其中T仅与指向变量类型的指针兼容。
关于“以空结尾的字符串”说明:
许多编程语言,包括C和C++,都缺少专用的字符串数据类型。这些语言以及使用它们构建的环境依赖于以空结尾的字符串。以nul结尾的字符串是一个以nul(#0)结尾的从零开始的字符数组;由于数组没有长度指示符,所以第一个NUL字符标记字符串的结尾。您可以在SysUtils单元中使用Delphi构造和特殊例程,以便在需要与使用它们的系统共享数据时处理以nul结尾的字符串。
例如,以下类型声明可用于存储以空结尾的字符串。
type
TIdentifier = array[0..15] of Char;
TFileName = array[0..259] of Char;
TMemoText = array[0..1023] of WideChar;
启用扩展语法({$X+})后,可以将字符串常量分配给静态分配的基于零的字符数组。(动态数组不适用于此目的。)如果使用比声明的数组长度短的字符串初始化数组常量,则剩余字符将设置为#0。
创建时间:2022.12.13 更新时间: