一、指针:指向一个内存地址的变量或参数。
  
  二、定义指针的方式如下:
  
   P: Pointer; //定义了可以指向任何类型的指针,Pointer 为无类型指针;
   Q, R: ^TType; //定义了指向 TType 类型的两个指针,TType 可是是各种
   //基本类型或自己定义的各种类型,也可以如下定义:
   // type PType = ^TType;
   // var Q, R: PType;
  
  三、指针的使用:
   P: Pointer;
   Q, R: ^TType;
   A: TType;
  
   Q:= R; //相同类型可以赋值
   P:= R; //可以把任何类型指针赋给无类型指针
   R:= P; //可以把无类型指针赋给有类型的指针
   Q:= @A; //加 @ 后,得到指向 A 的无类型指针,然后赋给 Q
   New(Q); //分配一个 TType 类型的空间,并把地址赋给 Q
   Dispose(Q); //释放 Q 所指向的空间
  
  四、指针的强制转换
   type TType = record ... end;
   PType = ^record ... end;
   var P: ^Integer;
   A: TType;
  
   P:= @A; //加 @ 后,得到指向 A 的无类型指针,可以赋给 P
   PType(P).xxx //把 P 转换为 PType 类型,并引用记录中的值
   with PType(P)^ do begin ... end; // 注意 ^ 的使用,在上一行中,
   //不需要加 ^ (当然加也不错),编译器可以自动识别,
   //而在这一行中,如不加 ^ ,会引起混淆。
  
   例子(把 string 的一个汉字当作 WideChar 并赋给一个整型变量):
   A: Integer; S: string;
   A:= Word(PWideChar(@S[3])^);
   // @S[3] 得到 S[3] 的地址,然后把它当作指向 WideChar 的指针,
   // 用 ^ 取出一个汉字,再用 Word 强制转换,最后赋给一个整型变量。
   // 用 Word 转换的原因是 Word 的字节数和 WideChar 的字节数一样。
   // 在 Delphi 中,只要字节数一样的类型,都可以用强制转换,如字节
   // 不一样,就要用函数,这也是很合情理的。
   // 一定要这么写是让程序员知道自己在干什么,不至于出错,真正的实现
   // 是很简单的。
  
  五、函数类型
  
   函数类型也是指针,定义函数类型如下:
   type TFunc = function (X: Integer; S: string): Boolean;
   TProc = procedure;
   var F, G: function(A: Integer): string;
   function Test(B: Integer): string;
   使用:
   F:= nil; //函数类型是指针
   F:= Test; //当函数类型在赋值号左面,右面是一个函数时当作是对函数
   //类型赋值,其它情况(如右面不是一个函数或函数类型在左
   //面或不是赋值号等),则认为是调用指向的函数,如下面一行
   S:= F(3); // 直接调用函数 Test(3);
   F:= @Test; // 取 Test 函数的地址并赋给 F,所以这样也正确
   @F:= @Test; //对函数类型取地址,得到的是所指向函数的地址,所以这样也正确
   @@F ... // 若想取函数类型的地址用两个 @,即 @@
   @F = @Test; // 判断 F 是否指向 Test,通过比较两个无类型指针得到
   Assigned(F) // 因为 F = nil 中左侧是调用 F,为了判断 F 是否不为空,
   // 用 Assigned
  
  六、方法指针
  
   这里指的是类内的函数类型,是一对指针,一个指向函数地址,另一个存放
  实例的引用。
   定义如下:
   TMethod = procedure (...) of object;
   使用:
   type TTest = class procedure T(...); end;
   var M: TMethod;
   M:= TTest.T;
   因为这里是一对指针,与其他指针的转换就有些问题,这里就不说了。
  
  七、集合、数组、动态数组、记录等
  
   这些是特定的类型,Delphi 没有说他们是指针类型,这和 C 是有区别的
  (随便什么都可以当指针用)。这一点请特别注意。
  
   要想使他们和指针取得联系,一般要使用地址符 @,其实这也是很方便的,
  如上面的汉字例子。还有前面讨论的 BlockRead 等例子都是这样。
  
   S: array of record ... end;
  
   SetLength(S, N);
   BlockRead(F, S[0], N);
   ~~~ 这里没有 @ 符的原因是它是 var 参数,不加 @ 就会把
   S[0] 的地址传进去。

Delphi指针及其它(转)的更多相关文章

  1. delphi.指针.PChar

    此文是delphi.指针.应用姊妹篇,想细化一下PChar应用,所以有了此文. 注意: 1:此文讲的是PChar与字符串相关操作,其它方法暂不多讲. 2:由于D分开Ansi/Unicode的两种完全不 ...

  2. Delphi指针的用法

    DELPHI指针的使用 大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上.因此,说指针是C语言的灵魂,一点都不为过.同时,这种说法也让很多人产生误解,似乎只有C语言的指针才 ...

  3. Delphi 指针大全(光看不练是学不会的)

    大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上.因此,说指针是C语言的灵魂,一点都不为过.同时,这种说法也让很多人产生误解,似乎只有C语言的指针才能算指针.Basic不支 ...

  4. delphi指针简单入门

    delphi指针简单入门:         看一个指针用法的例子:     1         var     2             X,   Y:   Integer;       //   ...

  5. delphi 指针 认识

    delphi 指针分为类型指针和无类型指针: 类型指针分为PChar.PInteger.PString等. 无类型指针Pointer. PPChar/PP...为指针的指针 @和Addr一样,为获取变 ...

  6. Delphi指针详解

    Delphi指针详解2007-12-04 06:08:57|  分类: DLL学习 阅读91 评论0   字号:大中小 订阅 大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用 ...

  7. DELPHI指针的使用

    DELPHI指针的使用 大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上.因此,说指针是C语言的灵魂,一点都不为过.同时,这种说法也让很多人产生误解,似乎只有C语言的指针才 ...

  8. delphi.指针.应用

    注:初稿...有点乱,可能增删改... 因为指针应用,感觉不好写,请大家指出错误,谢谢. 注意: 本文着重点讲的是指针的各类型的应用或使用,而不是说这种方法不应该+不安全+危险+不提倡使用. 其它:本 ...

  9. delphi.指针.应用----应用重要 多看 多练

    来自:http://www.cnblogs.com/qiusl/p/4026459.html ----------------------------------------------------- ...

随机推荐

  1. BZOJ 1821 JSOI2010 部落划分 Group prim

    Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗.只是,这一切都成 ...

  2. OD使用心得

    查看堆栈 从返回前面的竖线 到 竖线结束 也就是到 (从返回 msconfig.0065a318) 全看.这样不会丢失些东西 或者 看堆栈  直接将堆栈框拉大 避免有些东西没有看到

  3. CC2540开发板学习笔记(五)——串口通信

    (一)串口发送 一.实验现象: 开发板实现功能发送 二.实验过程 1.PL2303 USB转串口电路图 2.串口发送 (1)查看用户手册有: UART0 对应的外部设备 IO 引脚关系为: P0_2 ...

  4. HTML-Audio/Video

    简介: 容器:不论是音频还是视频文件,实际上都是容器文件: 视频文件包含了音频轨道.视频轨道和其他一些元数据: 视频文件播放时,音频轨道和视频轨道是绑定在一起:元数据包含了该视频的封面.子标题.字幕等 ...

  5. js:数据结构笔记11--排序算法(1)

    基本准备: function CArray(numElems) { this.dataStore = []; this.pos = 0; this.numElems = numElems; this. ...

  6. POJ3189 Steady Cow Assignment(最大流)

    题目大概说,有n头牛和b块草地,每头牛心中分别对每块草地都有排名,草地在牛中排名越高牛安排在那的幸福度就越小(...),每块草地都能容纳一定数量的牛.现在要给这n头牛分配草地,牛中的幸福度最大与幸福度 ...

  7. ZOJ3795 Grouping(强连通分量+缩点+记忆化搜索)

    题目给一张有向图,要把点分组,问最少要几个组使得同组内的任意两点不连通. 首先考虑找出强连通分量缩点后形成DAG,强连通分量内的点肯定各自一组,两个强连通分量的拓扑序能确定的也得各自一组. 能在同一组 ...

  8. CentOS6.4 配置Tengine

    1.安装Nginx所需的pcre-devel库 yum install -y gcc gcc-c++ wget ftp://ftp.csx.cam.ac.uk/pub/software/program ...

  9. POJ 3440 Coin Toss(概率)

    题目链接 概率问题,像是概率论上学的均匀分布,是不是呢,忘了... 概率同面积有关系,我写的各种搓,然后此题格式十分变态,=前有的时候俩空格,有的时候一个空格.代码各种搓. #include < ...

  10. NSString 处理技巧:分割字符串

    摘要 string类型是objective-c中用的最多的类型之一,有时会出现字符串中有我们不想要的字符. 如 "hello world"中的空格,或是"hello/wo ...