关于DELPHI对象一问 otheredit是 tform1.myedit的引用,不是指针(delphi是基于值/引用的),当然,实际实现时使用了地址。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对不起,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年以后才慢慢开窍的.如果认为有理,请给分. 去,我什么都不懂我只知道var otheredit:TEdit;procedure xxx;begin otheredit:=Tform1.myedit;……end;中的otheredit这样赋值是很不合理的一般来说一个对象实例即otheredit实际是特殊的数据变量,一般不要像其他变量一样做赋值操作otheredit:=Tform1.myedit;而是有他的操作方法:otheredit.Assign(form1.edit1);并且必须写他的释放代码otheredit.free;而释放了它不代表Edit1就着这样了 delphi 指针与引用是两回事? 不会吧 object pascal中的引用和c++的引用是有区别的。op中的引用允许存在空引用,而c++中是没有的。但是他的确是引用而不是指针。就象我们知道c++中通过指针访问对象属性是用“->”符号,而通过引用则是“.”符号object pascal也一样,如果是指针,那么访问属性应该是“^.”,而不是“.” to Hillside: delphi中指针不是pointer,不错,pointer是指针,但指针不是pointer。pointer只是相当于c中的void指针罢了。具有一定类型的指针是在type中定义的。引用和指针是两回事,建议看看我翻译的c++ faq lite中关于引用的那一节(不过pascal中的引用和c++还是有一定区别的)http://www.sunistudio.com/cppfaq/references.html to iknowabc:引用和指针是两回事,建议看看我翻译的c++ faq lite中关于引用的那一节(不过pascal中的引用和c++还是有一定区别的)http://www.sunistudio.com/cppfaq/references.html to Nicrosoft:http://www.sunistudio.com/cppfaq/references.html 找不到这一页?能否贴上来? var p: PBITMAP;begin P.bmBits := nil; P^.bmBits := nil;end;在Delphi里,这个效果是相同的,编译器就支持这样,你说呢?To Nicrosoft: 到底引用和指针有什么区别?C++我一点都不会,请你用最通俗的话解释一下。 P.bmBits := nil; P^.bmBits := nil;两句从语义来说应该是完全不一样的,编译器如何做我不知道,也许它们的汇编码的确是一样的但是,语言所表达的不是编译器,而是语义。 DBGRIDEH分组汇总 如何只把DateTimePincker的时分秒存入数据库? ◆◆◆◆ 小生命降生(3) ◆◆◆◆ abort有什么用? 如何用Activex下载文件 百分提问:如何制作Delphi的安装包 dbGrid中的字体颜色能否控制? 又有麻烦了!大家都来帮个忙。 怎样用sql语句来实现? 怎么知道这个程序已经运行了 长春的李延生来领分 如何利用Delphi来实现,网络广播
什么是引用?什么是指针?在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年以后才慢慢开窍的.
如果认为有理,请给分.
我只知道
var
otheredit:TEdit;
procedure xxx;
begin
otheredit:=Tform1.myedit;
……
end;
中的otheredit这样赋值是很不合理的
一般来说一个对象实例即otheredit实际是特殊的数据变量,
一般不要像其他变量一样做赋值操作otheredit:=Tform1.myedit;
而是有他的操作方法:otheredit.Assign(form1.edit1);
并且必须写他的释放代码otheredit.free;而释放了它不代表Edit1
就着这样了
http://www.sunistudio.com/cppfaq/references.html
http://www.sunistudio.com/cppfaq/references.html
http://www.sunistudio.com/cppfaq/references.html
找不到这一页?能否贴上来?
p: PBITMAP;begin
P.bmBits := nil;
P^.bmBits := nil;
end;在Delphi里,这个效果是相同的,编译器就支持这样,你说呢?To Nicrosoft:
到底引用和指针有什么区别?C++我一点都不会,请你用最通俗的话解释一下。
P^.bmBits := nil;两句从语义来说应该是完全不一样的,编译器如何做我不知道,也许它们的汇编码的确是一样的但是,语言所表达的不是编译器,而是语义。