otheredit是 tform1.myedit的引用,不是指针(delphi是基于值/引用的),当然,实际实现时使用了地址。

解决方案 »

  1.   

    对不起,Nicrosoft的理解有误.
    什么是引用?什么是指针?在Delphi中,指针是实实在在的,即pointer,它是一个类型.那么引用又是什么呢?英文是reference,但Delphi中并没有reference这个东西.reference这个东西,只是一个文档中使用概念.当它代表对象时,它的本质就是指针.
    回到原始问题.当你在源代码中写入一行var otheredit:TEdit,谁能告诉我,otheredit是个什么东西?换句话说,编译器怎么对待它?运行期它是什么?答案是:otheredit是一个不折不扣的指针,它实际上占用了4个字节的空间.Delphi中声明的对象变量,永远都是指针.你可以做一个试验,看看Sizeof(otheredit)是不是4?Pointer(otheredit)编译能否通过?
    明白了上述道理,你就可以理解AObject:=TObject.Create;这一行的含义,它是说,AObject是一个类的引用,实际上就是指针,TObject.Create在运行期生成了一个对象,这个对象的指针赋给了AObject.既然AObject是一个指针,只要你赋值得当,操作它就能操作对应的对象,实际上,多数情况,代码都是这样.但也可以完全没有引用,例如:
      with TObject.Create do try
        ...
      finally
        Free;
      end;
    多么干净漂亮,就是debug麻烦点儿
    对于iknowabc问题,也许你自己也可以明白了,otheredit和TForm1.myedit都是指针,它们都指向同一个对象,运行期除了本身地址不同外,没有其他区别.
    多数的中文参考书作者水平就不高,大家抄来抄去,学的人就更糊涂.笔者用了Delphi 2年以后才慢慢开窍的.
    如果认为有理,请给分.
      

  2.   

    去,我什么都不懂
    我只知道
    var 
      otheredit:TEdit;
    procedure xxx;
    begin
      otheredit:=Tform1.myedit;
    ……
    end;
    中的otheredit这样赋值是很不合理的
    一般来说一个对象实例即otheredit实际是特殊的数据变量,
    一般不要像其他变量一样做赋值操作otheredit:=Tform1.myedit;
    而是有他的操作方法:otheredit.Assign(form1.edit1);
    并且必须写他的释放代码otheredit.free;而释放了它不代表Edit1
    就着这样了
      

  3.   

    delphi 指针与引用是两回事? 不会吧
      

  4.   

    object pascal中的引用和c++的引用是有区别的。op中的引用允许存在空引用,而c++中是没有的。但是他的确是引用而不是指针。就象我们知道c++中通过指针访问对象属性是用“->”符号,而通过引用则是“.”符号object pascal也一样,如果是指针,那么访问属性应该是“^.”,而不是“.”
      

  5.   

    to Hillside: delphi中指针不是pointer,不错,pointer是指针,但指针不是pointer。pointer只是相当于c中的void指针罢了。具有一定类型的指针是在type中定义的。引用和指针是两回事,建议看看我翻译的c++ faq lite中关于引用的那一节(不过pascal中的引用和c++还是有一定区别的)
    http://www.sunistudio.com/cppfaq/references.html
      

  6.   

    to iknowabc:引用和指针是两回事,建议看看我翻译的c++ faq lite中关于引用的那一节(不过pascal中的引用和c++还是有一定区别的)
    http://www.sunistudio.com/cppfaq/references.html 
      

  7.   

    to Nicrosoft:
    http://www.sunistudio.com/cppfaq/references.html 
    找不到这一页?能否贴上来?
      

  8.   

    var
      p: PBITMAP;begin
      P.bmBits := nil;
      P^.bmBits := nil;
    end;在Delphi里,这个效果是相同的,编译器就支持这样,你说呢?To Nicrosoft:
      到底引用和指针有什么区别?C++我一点都不会,请你用最通俗的话解释一下。
      

  9.   

      P.bmBits := nil;
      P^.bmBits := nil;两句从语义来说应该是完全不一样的,编译器如何做我不知道,也许它们的汇编码的确是一样的但是,语言所表达的不是编译器,而是语义。