先声明: 不要把我说的这些个东西当作教科书, 这都是自己的浅见; 同时希望得到指正.
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指针类型示例 演示指针next及front
一个Delphi源码,用于说明过程采用指针的形式存储。 输出结果是类似这样的: ______________________________________________________ Rec.Int : 1234FFFE Rec.Proc : 004081F8 _____________...
分为指针-引用、“引用/值”模型、类型与指针、指针数据类型、Pchar指针
比较少专门讲Delphi指针的书 目 录 1 DELPHI 的指针-引用 2 delphi 的“引用/值”模型 3 谈谈 Delphi 的类型与指针 4 Delphi 7 指针数据类型 5 delphi 中的 Pchar 指针
Delphi指针大全PDF文档 大家都认为,C 语言之所以强大,以及...一、类型指针的定义 二、无类型指针的定义 三、指针的解除引用 四、取地址(指针赋值) 五、指针运算 六、动态内存分配 七、字符数组的运算 八、函数指针
通过示例学习在Delphi中如何使用指针,包括类型指针和无类型指针的使用。
DELPHI指针使用,DELPHI 的指针-引用,delphi 的“引用/值”模型,Delphi 7 指针数据类型
Delphi 类型指针变得简单。 它是什么? 它是一个用于在运行时创建某种类型数组的小单元,忘记GetMem()和FreeMem()并try..finally块。 通常当需要使用数组作为指针时,我们必须使用GetMem()或alloc()通过指定元素的...
Delphi XE3 标准课程第一章 基础指针类型
C含指针类型DLL函数 转化为delphi.mht
vb调用delphi编写的dll,自己定义数据结构,指针
Delphi与Windows API数据类型对照表Windows 数据类型 Delphi 数据类型 描述 LPSTR PAnsiChar 字符串指针 LPCSTR PAnsiChar 字符串指针 DWORD LongWord 整数 等等。
使用该消息涉及一个TcopyDataStruct结构类型的指针。该结构中有三个成员: dwData 是一个32位的附加参数 cbData 表示要传递的数据区的大小 lpData 表示要传递的数据区的指针 下面举个例子。该例子由两个程序构成,...
第一部分 快速开发的基础 第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
Delphi2007之前的API繁简转函数在Delphi2009版本出现后不能用,原因在于之前版本的String默认为AnsiString,而Delphi2007之后的String默认为WideString,同样,PChar指针也就为PAnsiString,所以调用Windows API函数...
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二分...
在Delphi 7.0中,已为我们定义好了非常多的函数,大致分类有6种:数据类型转换函数、字符串、数组操作函数、文件、磁盘操作函数、内存、指针操作函数、数学运算函数、日期函数。 在Delphi中调用函数,一般情况...
6-6-3 浅谈指针与数据结构 6-7 程序与函数(Procedures and Functions) 6-7-1 函数的意义与优点 6-7-2 函数的分类与效用 6-7-3 自定义函数使用方法概述 6-7-4 函数的声明、定义及其实现 6-7-5 参数传递方式 6-...
Function 程序的主要代码部分,是程序的主体部分,在运用四连通算法进行展开区域时使用到的记录类型的指针类型,Grid 中的数组大小已经扩大了各一个方块,用于记录当前列数 行数 以及 标识雷区和显示区的数组 的一个记录...
运用 TTimer 制作指针类型时钟的范例