1.指针能否进行加减的操作?类似c语言中的p+1,p++之类的如,p为字节指针(该如何定义?)p指向某个分配的内存(该如何分配,如何释放?)的某个位置能否加减p的值,使得其指向的内容为其他的?
2.指针指向某个类的的对象实例该如何做,该如何调用该实例的方法?与引用的实例有什么区别?如,有个类,T,其对象,obj1,obj2,已经创建来
p为T类型的指针
p:^T;
能否用p指向obj1,obj2?
   ^p=obj1 ?还是^p=@obj1?这样使用与
t:T;
  t=obj1,t=obj2有什么区别假设T有方法DoSomeThing
那么通过指针,能否调用DoSomeThing?如何调用?3.在函数间传递指针该注意什么问题
4.指针的优点在哪里?

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/1914/1914197.xml?temp=.2886011
      

  2.   

    1.不能直接加数字,只能用函数inc(p)一个单位
    2.p:=@obj1;
    p:=@obj2;
    调用方法:p^.方法名;p^和哦obj1或obj2没区别。优点当然是灵活性,但有时会有危险
      

  3.   

    1.当然可以加数字,inc(p,10),dec(p,10)
    2.都不行,p=@obj1反问:你能理解什么是指针吗?那3,4自己去体会
      

  4.   

    补充P.DoSomeThing也可以完成调用,就像用记录指针一样~~~
      

  5.   

    完全不同意楼上1、可以直接加数字,但要注意,直接加数字的指针不能直接被赋值,如var
      p1, p2: ^Integer;(p1 + 1)^ := 10; //错误
    p2 := p1 + 1;    //正确
    p2^ := 10;       //正确2、对象变量本身就是一个指针,所以个以直接赋值,如var
      p: Pointer;p := Form1;使用时只要将p强制类型转换,如TForm1(p)
      

  6.   

    修正一下
    1、当p为PChar时,可以直接加减,但为其他类型指针时,须强制类型转换
    p2 := Pointer(Integer(p1) + 1);
      

  7.   

    inc(p)
    可以inc(p,10)
    不行?“只能用函数inc(p)一个单位”???没试过,先去试试
      

  8.   

    1.字节指针为 PByte;可以用 Inc(p,n),Dec(p,n)来加减
    var p:PByte;  GetMem(p,n);
      Inc(p);
      Dec(p);
      FreeMem(p);
    2。类已经是指针类型,不需要 var p:^T。
      如果一定要这样,也是可以的。
      var
        Form1:TForm;
        p:^TForm;
        
      p:=@Form1;
      TForm(p^).Close;  还不如:
      var
        Form1:TForm;
        p:Pointer;
        
       p:=Form1;
       TForm(p).Close;