`

delphi指针简单入门

阅读更多

摘自:http://topic.csdn.net/t/20030614/03/1914197.html

 

delphi指针简单入门:

看一个指针用法的例子:
1         var
2             X,   Y:   Integer;       //   X   and   Y   整数类型
3             P:   ^Integer;           //   P   指向整数类型的指针
4         begin
5             X   :=17; //   给   X   赋值
6             P   :=   @X;                   //   把   x的地址赋给p
7             Y   :=   P^;                   //   取出p所指向的数值赋给y
8         end;

第二行定义了两个变量X,y.   第三行声明了p是指向整数类型的指针;意味着p能够指向x或者y的地址.第五行赋给x值,第六行把x的地址赋给p.最

后通过p指向的变量赋值给y.此时,x和y有相同的值.

操作符@用来取出变量的地址,也可以取出过程和函数的地址.

而符号^有两个目标,
当它出现在类型定义的前面时如 ^typename 表示指向这种类型的指针;
当它出现在指针变量后边时   如 point^ 返回指针指向的变量的值;

理解指针比较容易理解面向对象的pascal语言,因为指针经常在幕后操作.任何要求动态分配大的内存空间的类型可以用指针类型.例如

,long-string变量,实际在使用指针进行操作.另外一些高级的编程技术需要使用指针类型.
有时指针是适应object   pascal严格的类型限制的唯一方法.同过一个通用的指针类型,通过类型转换成不同的指针类型,如下面的例子:
type

    PInteger   =   ^Integer;
var
    R:   Single;
    I:   Integer;
    P:   Pointer; //通用的指针
    PI:   PInteger;
begin
    P   :=   @R; //取出R的内存地址
    PI   :=   PInteger(P); //把通用类型转换成指向整数类型的指针
    I   :=   PI^;
end;

当然了,实数和整数的存储格式不同.这种赋值是把原始的二进制数据从R拷贝到I,而不进行转换.

保留字nil是一个特殊的常量可以赋给任何指针类型,当nil赋給一个指针时,指针什么也不指向,是一个空指针.

@操作符返回变量的内存中的存储地址,或者是过程\函数\方法;

1.如果变量,@X返回的是x的地址。如果编译选项{$T-}没有打开,着返回的事一个通用的指针,如果编译选项打开了,着返回的是x的类型对应的指

针.

2.如果是例程(过程\函数),@F返回的是F的入口点,@F的类型是一个指针。

3.当@用在类的方法中时,则方法的名称必须有类名,例如@TMyclass.Dosomething
指针指向TMyclass的dosomething方法。


当一个过程变量在赋值语句的左边时,编译器期望一个过程值在赋值语句的右边。这种赋值使得左边的变量可以指向右边定义的过程或者函数

入口点。换句话说,可以通过该变量来引用声明的过程或者函数,可以直接使用参数的引用。

var

    F:   function(X:   Integer):   Integer;
    I:   Integer;
function   SomeFunction(X:   Integer):   Integer;
  ...
F   :=   SomeFunction;     //   给f赋值
I   :=   F(4);                     //   调用所指向的函数

在赋值语句中,左边变量的类型决定了右边的过程或者方法指针解释。

var

    F,   G:   function:   Integer;
    I:   Integer;
function   SomeFunction:   Integer;
  ...
F   :=   SomeFunction;     //   给f赋值
G   :=   F;                           //   把F的值拷贝给G
I   :=   G;                           //   调用函数

第一句获得函数的入口,第二句将指针复制,第三句获得函数的返回值。

有时候还可以这样使用
if   F   =   MyFunction   then   ...;
在这里,F的出现导致一个函数调用;编译器调用F指向的函数,然后调用Myfunction,比较结果。这个规则是无论何时一个过程变量(

procedural   variable)出现在一个表达式中,它表示调用所指向的函数或者过程。有时F指向一个过程(没有返回值),或者f指向一个需要参

数的函数,则前面的语句会产生一个编译错误。要比较F和Myfunction需要用
if   @F   =   @MyFunction   then   ...;
@F把F转换成一个包含地址的无类型的指针变量,@myfunction返回myfunction的地址。
获得一个过程变量的内存地址使用@@。例如,@@F返回F的地址。

@操作符通常把一个无类型的指针值赋给一个过程变量,例如:
var   StrComp:   function(Str1,   Str2:   PChar):   Integer;
  ...
@StrComp   :=   GetProcAddress(KernelHandle,   'lstrcmpi ');
调用GetProcAddres函数,用strcomp指向这个值
任何过程变量可以赋成nil,表示指证什么也不指向。但是试图调用一个nil值的过程变量导致一个错误,为了测试一个过程变量是否可以赋值

,用标准的赋值函数Assigned
if   Assigned(OnClick)   then   OnClick(X);


先到这里吧,我也是一边看帮助一边翻译的,没有参考什么书籍,所以有一些名词可能不太准确,希望大家多多包涵吧,毕竟本人的英文水平有限啊

.呵呵

有什么问题可以参看delphi的帮助的相关内容,个人觉得还是看帮助好一些,而且原文最好,像我这样翻译可能误导大家啊,看的时候要受其精华

弃其糟粕,看完了别骂我就行了,全当我给大家仍块砖头吧,别砸我啊@_@

分享到:
评论

相关推荐

    delphi 指针入门实例

    delphi 指针入门实例,主要是针对delphi指针入门的朋友。

    delphi指针入门

    delphi指针入门,相当经典。

    Delphi对象模型和接口指针分析

    这个程序所包含的是,籍由故意设计而成的TInterfacedObject和TMyInterfacedObject2个类,得到4个实例对象,4个接口指针,并且演示了在编译器实现过程中,对象模型的空间状态,接口指针,接口方法表格种种复杂的关系...

    指针入门教程

    指针入门教程delphi C++,大师讲解,深入浅出,让你不再害怕指针

    Delphi 5 经典教程

    1.5 创建一个简单的应用程序 11 1.6 事件机制的优势在哪里 12 1.7 加速原型化 13 1.8 可扩展的组件和环境 13 1.9 IDE最重要的十点功能 13 1.10 总结 15 第2章 Object Pascal语言 16 2.1 注解 16 2.2 新的过程和函数...

    DELPHI 资料

    delphi 快捷键的使用 delphi函数大全-繁体 delphi函数大全-简体 函数,属性大全 枚舉類型詳細說明 指令字,保留字,特殊符号 指针入门 指针的创建和释放 數據類型 数据类型转换-繁体 数据类型转换-简体 编译错误信息

    Delphi 6集成开发环境

    1.4 一个简单的Delphi 程序........................... 12 1.5 本章小结.................................................... 13 第2 章 Object Pascal 语言..........14 2.1 Object Pascal 语言基础...............

    郁金香VC++外挂编程全集中级篇2.1.5part01

    1 入门篇.以《QQ连连看为例》 1.1、一个最简单的外挂 1.1.1、游戏数据分析(SPY++) 1.1.1、游戏窗口数据分析(SPY++) a、取得窗口相对坐标 b、读出游戏窗口信息GetWindowRect c、移动鼠标指针SetCursorPos 1.1.2 用...

    2018 猎豹网校 教程大全 资源难找赶紧保存吧

    Delphi基础课程[MP4] C语言高级教程 指针和结构体[MP4] C和指针[MP4] C程序设计语言[MP4] CorelDRAW 官方教程[MP4] CEGUI 游戏界面开发快速入门[MP4] CCNA 学习指南 (下)[MP4] CCNA 学习指南 (上)[MP4] C++ ...

    VB到底是什么?它的应用范围有哪些?

    3.7 开始在VB里面尝试实现数据结构,比如做一个链表,vb没有指针,所以不能向c那样做链表,但我想这时候你应该知道怎么做乐。 3.8 开始尝试做游戏,做不同的程序,做自己想做的东西。 3.9 深入VB。 VB到了这个阶段...

    SQL21日自学通

    一个简单的PL/SQL 语句块395 又一个程序398 存储过程包和触发机制403 总结406 问与答407 校练场407 练习407 第19 天TRANSACT-SQL 简介408 目标408 TRANSACT-SQL 概貌408 对ANSI SQL 的扩展408 谁需要使用TRANSACT-...

    JAVA上百实例源码以及开源项目源代码

    Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟 用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:...

    The Art of Assembly Language

    本书以X86系列微机为背景,从简单的Hello程序开始,系统而详细地阐述了X86微机汇编语言编程的行种基础知识和编程技巧,内容涉及到数据表示、存储器管理、各种数据类型、过程、与汇编语言相关的体系结构、控制结构、...

    JAVA上百实例源码以及开源项目

     用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例  Message-Driven Bean EJB实例源代码,演示...

    21天学习SQL V1.0

    21天学习SQL V1.0.pdf 66 SQL 21 日自学通(V1.0) 翻译人笨猪 ...日期/时间函数............................................................................................................ADD_MONTHS..................

Global site tag (gtag.js) - Google Analytics