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的帮助的相关内容,个人觉得还是看帮助好一些,而且原文最好,像我这样翻译可能误导大家啊,看的时候要受其精华   
    
  弃其糟粕,看完了别骂我就行了,全当我给大家仍块砖头吧,别砸我啊@_@

http://blog.csdn.net/diligentcatrich/article/details/5492963

delphi指针简单入门的更多相关文章

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

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

  2. delphi.指针.PChar

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

  3. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  4. 线段树简单入门 (含普通线段树, zkw线段树, 主席树)

    线段树简单入门 递归版线段树 线段树的定义 线段树, 顾名思义, 就是每个节点表示一个区间. 线段树通常维护一些区间的值, 例如区间和. 比如, 上图 \([2, 5]\) 区间的和, 为以下区间的和 ...

  5. 数据结构和算法(Golang实现)(4)简单入门Golang-结构体和方法

    结构体和方法 一.值,指针和引用 我们现在有一段程序: package main import "fmt" func main() { // a,b 是一个值 a := 5 b : ...

  6. 数据结构和算法(Golang实现)(5)简单入门Golang-接口

    接口 在Golang世界中,有一种叫interface的东西,很是神奇. 一.数据类型 interface{} 如果你事前并不知道变量是哪种数据类型,不知道它是整数还是字符串,但是你还是想要使用它. ...

  7. 数据结构和算法(Golang实现)(6)简单入门Golang-并发、协程和信道

    并发.协程和信道 Golang语言提供了go关键字,以及名为chan的数据类型,以及一些标准库的并发锁等,我们将会简单介绍一下并发的一些概念,然后学习这些Golang特征知识. 一.并发介绍 我们写程 ...

  8. 用IntelliJ IDEA创建Gradle项目简单入门

    Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...

  9. [原创]MYSQL的简单入门

    MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...

随机推荐

  1. android: 长按删除listview的item

    转自:http://www.cnblogs.com/nuistlr/archive/2012/09/07/2675649.html 首先要继承OnItemLongClickListener publi ...

  2. .htaccess文件设置

    1.为使.htaccess有效,需要先做httpd.conf设置 #打开改写模式Options FollowSymLinks AllowOverride All#打开重写模式,去掉这行注释LoadMo ...

  3. Java 重入锁 ReentrantLock

    本篇博客是转过来的. 但是略有改动感谢 http://my.oschina.net/noahxiao/blog/101558 摘要 从使用场景的角度出发来介绍对ReentrantLock的使用,相对来 ...

  4. HttpResponseRedirect VS HttpResponse

    当我们处理了post提交的数据之后,我们使用HttpResponseRedirect跳转到另一个页面,而不是用HttpResponse. 例如当一个投票环节时使用HttpResponse可以使用浏览器 ...

  5. springmvc+mybatis+redis(转)

    最近在学习redis的使用方法,它的本地使用方法比较简单,只需要先启动Redis服务器,然后运行测试代码即可.但是现在我想要在网站上访问数据库的时候采用Redis缓存,问题就出来了.要么是缓存直接失效 ...

  6. Automake创建项目

    autoconf和automake可以方便的构建linux下项目,一个简单的automake项目实例,麻雀虽小五脏俱全,以后无外乎在这基础上扩展相应的宏完善而已. .首先建立项目目录树 )创建目录树 ...

  7. JAVA爬虫 WebCollector

    JAVA爬虫 WebCollector 爬虫简介: WebCollector是一个无须配置.便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫. 爬虫 ...

  8. iOS WebCore的WebEvent和EventHandler

    WebEvent是iOS专有的类,负责封装和携带从UIKit得到的系统事件信息,并由WebKit层的WAKResponder子类传递到WebCore的EventHandler. UIKit层的逻辑可参 ...

  9. Vim 使用设置

    转自:http://www.cnblogs.com/end/archive/2012/06/01/2531147.html Vim 作为最好用的文本编辑器之一,使用vim来编文档,写代码实在是很惬意的 ...

  10. CentOS下利用sshpass不用手动输入密码远程执行命令

       在测试的时候要同时操作多台机器,每次都要挨个去执行几乎相同的命令或者修改一些设置,这样很影响工作效率也很烦,所以就想写一个脚本,远程自动去做这些操作.远程执行命令很简单,但是不能在执行命令加上命 ...