`
free_bird816
  • 浏览: 206025 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Delphi 的类型与指针

阅读更多

先声明: 不要把我说的这些个东西当作教科书, 这都是自己的浅见; 同时希望得到指正.

Delphi 的指针分为 "类型指针" 和 "无类型指针" 两类.
Delphi 中的类型, 常用的也得有几百个, 我们可以给每种类型定义相应的类型指针.
其实 Delphi 已经为很多类型预定义了指针, 譬如数据类型:
Integer 有对应的 PInteger;
Char 有对应的 PChar;
string 有对应的 PString;
再譬如:
TPoint 有对应的 PPoint;
TColor 有对应的 PColor 等等.

另外, 指针也可以有指针, 譬如: PChar 是字符指针, PPChar 又是 PChar 的指针(这都是 Delphi 预定义的).

根据上面的例子, 咱们先总结一下类型与指针的命名规则:
类型约定用 T 打头(Delphi 常规的数据类型除外, 譬如: String);
指针约定用 P 打头;
指针的指针约定用 PP 打头.
类型和指针是不可分的两个概念, 指针本身也是一种类型 - "指针类型".



先认识一下指针相关的操作符(@、^、Addr):

@ Addr ^
@变量 获取变量指针
Addr(变量)
指针^ 获取指针指向的实际数据
var Pxxx: ^类型 定义 Pxxx 某种类型的指针的变量 
type Pxxx = ^类型  定义 Pxxx 为某种类型的指针



举例说明:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//Integer 与 PInteger
procedure TForm1.Button1Click(Sender: TObject);
var
  int: Integer;
  pint: PInteger; {定义类型指针, Integer 类型的指针}
begin
  int := 100;
  pint := @int;        {现在 pint 就是 int 的指针}
  pint^ := pint^ + 1;  {现在 pint^ 和 int 是一回事, 测试一下:}
  ShowMessage(IntToStr(int));   {101}
  ShowMessage(IntToStr(pint^)); {101}
end;

//直接定义类型指针
procedure TForm1.Button2Click(Sender: TObject);
var
  int: Integer;
  PMyInt: ^Integer;
begin
  int := 100;
  PMyInt := Addr(int); {这句和: PMyInt := @int; 相同}
  PMyInt^ := PMyInt^ + 1;
  ShowMessage(IntToStr(int));     {101}
  ShowMessage(IntToStr(PMyInt^)); {101}
end;

//先自定义指针类型
procedure TForm1.Button3Click(Sender: TObject);
type
  PInt = ^Integer;
var
  int: Integer;
  PMyInt: PInt;
begin
  int := 100;
  PMyInt := @int;
  PMyInt^ := PMyInt^ + 1;
  ShowMessage(IntToStr(int));     {101}
  ShowMessage(IntToStr(PMyInt^)); {101}
end;

//指针的指针
procedure TForm1.Button4Click(Sender: TObject);
var
  int: Integer;
  pint: PInteger;
  ppint: ^PInteger;
begin
  int := 100;
  pint := @int;
  ppint := @pint;
  ppint^^ := ppint^^ + 1;
  ShowMessage(IntToStr(int));     {101}
  ShowMessage(IntToStr(pint^));   {101}
  ShowMessage(IntToStr(ppint^^)); {101}
end;

end.

知道以上这些就可以操作了, 就可以看懂别人的代码了; 不过要想彻底明白指针到底是怎么回事, 需要从内存谈起.


 

原文:http://www.cnblogs.com/del/archive/2008/03/07/1094655.html

<script type="text/javascript"></script>

分享到:
评论

相关推荐

    delphi指针类型示例

    在Delphi编程环境中,指针是一种非常重要的数据类型,它能够存储内存地址,进而实现对内存的直接访问和操作。本示例将深入探讨Delphi中的指针类型,特别是`next`和`front`这两个概念,它们在处理链表或队列等数据...

    delphi指针大全

    一、指针与引用 在Delphi中,指针是一个变量,其存储的是另一个变量的内存地址。引用则类似于C++中的引用,它是一个别名,指向一个已存在的变量。尽管它们在用途上相似,但有以下关键区别: 1. 指针可以改变其指向...

    浅谈Delphi的指针

    #### 二、类型指针的定义 在 C 语言中,类型指针定义如下: ```c int *ptr; char *ptr; ``` 而 Object Pascal 中定义类型指针的方式略有不同: ```pascal var ptr: ^Integer; ptr: ^Char; ``` 可以看出,两者...

    Delphi函数指针

    这种函数指针类型可以与任何参数完全相同的函数兼容,即可以将任何此类函数赋值给该函数指针变量。 函数指针的使用 函数指针可以用于两种不同的目的: 1. 声明函数指针类型的变量:可以将函数指针类型的变量声明...

    实例Delphi演示过程采用指针的形式存储..rar

    通过学习和分析这些代码,我们可以深入理解Delphi指针的用法,包括指针类型、指针运算、内存管理以及指针在函数参数和返回值中的应用。 总之,掌握Delphi中的指针操作对于提升编程效率和编写高效代码至关重要。通过...

    实例Delphi演示过程采用指针的形式存储

     一个Delphi源码,用于说明过程采用指针的形式存储。    输出结果是类似这样的:  ______________________________________________________  Rec.Int : 1234FFFE  Rec.Proc : 004081F8  _____________...

    Getpointer_delphi7_指针_

    五、指针与数组 在处理数组时,指针可以用来遍历或快速访问数组元素。例如,定义一个整型数组并使用指针遍历: ```delphi var Arr: array[0..9] of Integer; P: PInteger; begin for P := @Arr[0] to @Arr[9] do ...

    delphi指针实例

    在本实例中,我们将探讨Delphi中的指针使用,特别是与`PChar`相关的知识点。 首先,`PChar`是Delphi中的一个基本类型,它是一个无符号整型指针,通常用来表示字符数组的起始地址,即C语言风格的字符串。`PChar`可以...

    Pointer_Samples.rar_Pointer delphi_compiler_delphi 指针_delphi po

    - `AllocMem` 和 `FreeMem` 是另一种动态内存管理方式,适用于无类型指针。 7. **指针数组和记录**: - 指针可以用于创建动态数组,如 `var arr: array of Pointer;` - 记录类型中可以包含指针字段,提供灵活的...

    Delphi指针的使用示例

    使用类型指针可以确保指针指向的数据类型与实际操作的数据类型一致,从而避免类型不匹配的错误。下面是一个简单的例子: ```pascal var Num: Integer; PNum: ^Integer; begin Num := 100; PNum := @Num; // ...

    Delphi指针使用文档

    总结,Delphi 的指针机制虽然在语法上与 C 语言有所不同,但功能上同样强大,提供了类型安全的指针操作,包括类型指针、无类型指针、解除引用、取地址、指针运算、动态内存管理、字符数组运算和函数指针等,使得...

    delphi指针大全.pdf

    在Delphi中,类型指针用于指向特定数据类型的变量。例如,如果要定义一个指向整型的指针,可以写作: ```pascal var ptr: ^Integer; ``` 这与C语言中的`int *ptr;`类似。 2. **无类型指针的定义** Delphi中...

    Delphi 指针学习资料

    七、指针与类成员 在面向对象编程中,指针也可以用于指向对象实例。`TObject`类(所有Delphi类的基类)有一个内置的`Self`指针,指向当前对象。通过指针,可以实现对象的引用和间接操作。 总结,Delphi的指针是强大...

    RecordArray:Delphi 类型指针变得简单

    Delphi 类型指针变得简单。 它是什么? 它是一个用于在运行时创建某种类型数组的小单元,忘记GetMem()和FreeMem()并try..finally块。 通常当需要使用数组作为指针时,我们必须使用GetMem()或alloc()通过指定元素的...

    Delphi 数据类型列表

    1. Pointer:无类型指针,用于描述一个指针的值。 2. PAnsiString:指向 ANSI 字符串的指针。 3. PString:指向字符串的指针。 4. PByteArray:指向字节数组的指针。 5. PCurrency:指向货币类型的指针。 6. PDouble...

    Delphi 10.3、10.4 内联变量、托管记录自动化和智能指针

    总的来说,内联变量是 Delphi 中一种强大的性能优化工具,特别是在处理托管类型时。通过限制变量的作用域,可以减少不必要的内存管理和提升程序运行效率。这不仅有助于提升应用程序的性能,还使代码更加清晰,易于...

    如何将C/C++翻译成delphi

    Delphi中的指针与C/C++中的指针有所不同。Delphi中的指针是Object Pascal语言的组成部分,它是一种强类型语言,而C/C++是弱类型语言。在Delphi中,指针是通过关键字“指针”定义的,而在C/C++中,指针是通过星号“*...

    C++与Delphi数据类型对照表

    2. **特定类型指针**:如C++中的`LPSTR`、`LPWSTR`,在Delphi中分别对应`PChar`、`PWideChar`,用于指向字符串的首地址。 3. **Windows API特定类型**:如`HANDLE`(`THandle`)、`FARPROC`(`TFarProc`)、`ATOM`...

    Delphi指针大全

    11. **指针与内存管理**:理解内存布局和指针的关系是高效编程的关键。在处理大量数据或低级编程任务时,熟练掌握指针可以显著提升程序性能。 综上所述,《Delphi指针大全》这本书应该包含了这些关键点的详细讲解,...

Global site tag (gtag.js) - Google Analytics