1.指针的概念:

一个变量的地址称为该变量的指针。

2.指针变量:

专门用于存储其它变量地址的变量。

指针与指针变量的区别,就 是变量值与变量的区别。

 

1,类型指针的定义。对于指向特定类型的指针,

eg:
var
ptr : ^Integer;
ptr : ^char;
2,无类型指针的定义。也就是可以指向任何类型数据的指针。Object Pascal为其定义了一个专门的类型:Pointer。
ptr : Pointer;

3,指针的解除引用。要解除指针引用(即取出指针所指区域的值), ptr^。

4,取地址(指针赋值)。取某对象的地址并将其赋值给指针变量,ptr := @Object;

 

看一个指针用法的例子:   
   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所指向的数值17 赋给y   
   8          end;   
    
   第二行定义了两个变量X,y.    第三行声明了p是指向整数类型的指针;意味着p能够指向x或者y的地址.第五行赋给x值,第六行把x的地址赋给p.最      
   后通过p指向的变量赋值给y.此时,x和y有相同的值.    
   操作符@用来取出变量的地址,也可以取出过程和函数的地址.   
    
   而符号^有两个作用:   
   当它出现在类型定义的前面时如 ^typename 表示指向这种类型的指针;   
   当它出现在指针变量后边时    如 point^ 返回指针指向的变量的值,如上 P^为17;     
   理解指针比较容易理解面向对象的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方法。    

 

 

 

posted on 2011-08-19 08:21  cnby  阅读(450)  评论(0编辑  收藏  举报