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  更新时间:

posted on 2022-12-13 18:13  滔Roy  阅读(652)  评论(0编辑  收藏  举报

导航