`
free_bird816
  • 浏览: 197380 次
  • 性别: 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指针类型示例 演示指针next及front

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

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

    delphi指针大全

    分为指针-引用、“引用/值”模型、类型与指针、指针数据类型、Pchar指针

    delphi指针大全.pdf

    比较少专门讲Delphi指针的书 目 录 1 DELPHI 的指针-引用 2 delphi 的“引用/值”模型 3 谈谈 Delphi 的类型与指针 4 Delphi 7 指针数据类型 5 delphi 中的 Pchar 指针

    Delphi指针大全PDF

    Delphi指针大全PDF文档 大家都认为,C 语言之所以强大,以及...一、类型指针的定义 二、无类型指针的定义 三、指针的解除引用 四、取地址(指针赋值) 五、指针运算 六、动态内存分配 七、字符数组的运算 八、函数指针

    Delphi指针的使用示例

    通过示例学习在Delphi中如何使用指针,包括类型指针和无类型指针的使用。

    DELPHI指针使用

    DELPHI指针使用,DELPHI 的指针-引用,delphi 的“引用/值”模型,Delphi 7 指针数据类型

    RecordArray:Delphi 类型指针变得简单

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

    Delphi XE3 标准课程第一章 基础指针类型

    Delphi XE3 标准课程第一章 基础指针类型

    C含指针类型DLL函数 转化为delphi.mht

    C含指针类型DLL函数 转化为delphi.mht

    vb调用delphi编写的dll,自己定义数据结构,指针

    vb调用delphi编写的dll,自己定义数据结构,指针

    Delphi与Windows API数据类型对照表

    Delphi与Windows API数据类型对照表Windows 数据类型 Delphi 数据类型 描述 LPSTR PAnsiChar 字符串指针 LPCSTR PAnsiChar 字符串指针 DWORD LongWord 整数 等等。

    Delphi程序间消息传递.txt

    使用该消息涉及一个TcopyDataStruct结构类型的指针。该结构中有三个成员: dwData 是一个32位的附加参数 cbData 表示要传递的数据区的大小 lpData 表示要传递的数据区的指针 下面举个例子。该例子由两个程序构成,...

    Delphi 5 经典教程

    第一部分 快速开发的基础 第1章 Delphi 5下的Windows编程 1 1.1 Delphi产品家族 1 1.2 Delphi是什么 3 1.2.1 可视化开发环境 3 1.2.2 编译器的速度和已编译代码的效 ...5.9 消息与事件之间的关系 128 5.10 总结 129

    Delphi2009、Delphi2010的GBK繁体转简体函数

    Delphi2007之前的API繁简转函数在Delphi2009版本出现后不能用,原因在于之前版本的String默认为AnsiString,而Delphi2007之后的String默认为WideString,同样,PChar指针也就为PAnsiString,所以调用Windows API函数...

    Delphi算法与数据结构 源码(下)

    2.2Delphi中的数组类型 2.3TList类和指针数组 2.4磁盘数组 2.5小结 第3章链表、栈和队列 3.1单链表 3.2双向链表 3.3链表的优缺点 3.4栈 3.5队列 3.6小结 .第4章查找 4.1比较例程 4.2顺序查找 4.3二分...

    delphi7常用函数

     在Delphi 7.0中,已为我们定义好了非常多的函数,大致分类有6种:数据类型转换函数、字符串、数组操作函数、文件、磁盘操作函数、内存、指针操作函数、数学运算函数、日期函数。  在Delphi中调用函数,一般情况...

    Delphi7.完美经典

    6-6-3 浅谈指针与数据结构 6-7 程序与函数(Procedures and Functions) 6-7-1 函数的意义与优点 6-7-2 函数的分类与效用 6-7-3 自定义函数使用方法概述 6-7-4 函数的声明、定义及其实现 6-7-5 参数传递方式 6-...

    Delphi 高级扫雷程序.rar

    Function 程序的主要代码部分,是程序的主体部分,在运用四连通算法进行展开区域时使用到的记录类型的指针类型,Grid 中的数组大小已经扩大了各一个方块,用于记录当前列数 行数 以及 标识雷区和显示区的数组 的一个记录...

    TTimer 制作指针类型时钟的范例

    运用 TTimer 制作指针类型时钟的范例

Global site tag (gtag.js) - Google Analytics