B Bxch_1000 Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-06 #21 to DreamTiger,Pearl: 明白了,谢谢你们的回答!
S szf Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-06 #22 CompareMem比较的只是内存,能够得出相等的结果只是[red]碰巧[/red]两块内存相同而已。 比如: A: Array[0..3] of Char; B: Integer; begin FillChar(A,#0,4) //用全零填充数组所在的内存 B := 0 //不用解释了吧 这时CompareMem(@A,@B,4)为真, 但这不成为可以用它来比较字符数组和整数是否相等的理由的。 为特定的数据结构写特定功能的函数,这在编程过程中是很常见的,还是老实写个函数吧。
CompareMem比较的只是内存,能够得出相等的结果只是[red]碰巧[/red]两块内存相同而已。 比如: A: Array[0..3] of Char; B: Integer; begin FillChar(A,#0,4) //用全零填充数组所在的内存 B := 0 //不用解释了吧 这时CompareMem(@A,@B,4)为真, 但这不成为可以用它来比较字符数组和整数是否相等的理由的。 为特定的数据结构写特定功能的函数,这在编程过程中是很常见的,还是老实写个函数吧。
J jackl Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-06 #23 我觉得你定义的A,B只是类型的结构,而不是类型,所以不能比较!
B BeginDelphi Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-06 #24 to Bxch_1000, 你的方法是可以的.因为DELPHI用引用机制,对于同一个字符串,DELPHI不会另开内存, 而是直接引用该内存单元,只是在记数器上+1. a.a='123';b.a:='123';因为他们指向的内存是一样的,所以用comparemem得出的结果是 一样的.
to Bxch_1000, 你的方法是可以的.因为DELPHI用引用机制,对于同一个字符串,DELPHI不会另开内存, 而是直接引用该内存单元,只是在记数器上+1. a.a='123';b.a:='123';因为他们指向的内存是一样的,所以用comparemem得出的结果是 一样的.
B Bxch_1000 Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-06 #26 to szf: >>CompareMem比较的只是内存,能够得出相等的结果只是[red] 碰巧[/red]两块内存相同而已。 并不是碰巧,如过Record中没有指针类型或字符串类型,用CompareMem来比较 Record是没问题的,如果有指针类型或字符串类型就不一定了。 to BeginDelphi: 谢谢你对引用机制的说明,
to szf: >>CompareMem比较的只是内存,能够得出相等的结果只是[red] 碰巧[/red]两块内存相同而已。 并不是碰巧,如过Record中没有指针类型或字符串类型,用CompareMem来比较 Record是没问题的,如果有指针类型或字符串类型就不一定了。 to BeginDelphi: 谢谢你对引用机制的说明,
叮 叮叮当当 Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-06 #27 来自:smallbs, 时间:2002-6-6 8:37:00, ID:1145802 A B是类型,你只能对A.X、B.X直接赋值,所以只能直接比较 A.X、 B.X 了 不对!A := B 是可以的,能正常赋值,我试过的。而且我特意试了,A := B 并不是简单地把B的地址赋给A,是确确实实地传递了数据。 看来对于两个相同record类型的变量,Delphi可以允许它们相互赋值,但比较就不行了。
来自:smallbs, 时间:2002-6-6 8:37:00, ID:1145802 A B是类型,你只能对A.X、B.X直接赋值,所以只能直接比较 A.X、 B.X 了 不对!A := B 是可以的,能正常赋值,我试过的。而且我特意试了,A := B 并不是简单地把B的地址赋给A,是确确实实地传递了数据。 看来对于两个相同record类型的变量,Delphi可以允许它们相互赋值,但比较就不行了。
南 南宫吹云 Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-07 #28 两个类型相同的变量当然可以直接赋值,赋值号右边是左边类型相容的变量就可以。
P Pc 狂迷 Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-08 #29 叮叮当当: 是你老在提前这贴,还是 BBS 有Bug ?
叶 叶枫 Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-07 #30 叮当当: 兄弟,怎么我每次刷新大富翁的页面,这个贴子都是在前面。谁能告诉我是什么回事 ????(你千万不要告诉我,你就坐在机器旁边不停地提前:))
W watter Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-07 #31 类型是不能比较的,只有两个变量之间之间可以互相比较 你的程序应该这样; MyRecord=Record x:integer; y:integer; z:array[0..2] of byte; end; var a, b:MyRecord; with a do begin x:=..; y:=..; z:=..; end; with b do begin x:=..; y:=..; z:=..; end; if a=b then ... else..
类型是不能比较的,只有两个变量之间之间可以互相比较 你的程序应该这样; MyRecord=Record x:integer; y:integer; z:array[0..2] of byte; end; var a, b:MyRecord; with a do begin x:=..; y:=..; z:=..; end; with b do begin x:=..; y:=..; z:=..; end; if a=b then ... else..
南 南宫吹云 Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-07 #32 叮当当: 兄弟,怎么我每次刷新大富翁的页面,这个贴子都是在前面。谁能告诉我是什么回事 ????(你千万不要告诉我,你就坐在机器旁边不停地提前:)) 就是就是,是怎么回事?
L lp414 Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-07 #34 还没试。不过我觉得你定义的A,B都是抽象的类,没有实例化。怎么可以比较呢? 如果你实例化了,就可以比较。
叮 叮叮当当 Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-08 #35 var A, B: record X, Y: Integer; Z: array[0..2] of Byte; end; 这样定义出来A和B就是类型的实例了,是变量,watter 和 lp414 理解错了。 我也不知道这个帖子是怎么回事,大概是置顶了或有人帮我顶吧:)
var A, B: record X, Y: Integer; Z: array[0..2] of Byte; end; 这样定义出来A和B就是类型的实例了,是变量,watter 和 lp414 理解错了。 我也不知道这个帖子是怎么回事,大概是置顶了或有人帮我顶吧:)
张 张无忌 Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-08 #36 我认为没有必要比较2个RECORD的大小,你比较了要知道什么结果了???
叮 叮叮当当 Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-08 #37 TO: 张无忌 不是比较大小,是想比较内容(所有子项)是否相等。
叮 叮叮当当 Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-08 #39 TO: 张无忌 你的意思,还是自己针对这种类型编个函数A.X、A.Y……逐一与B的成员比较吗?
张 张无忌 Unregistered / Unconfirmed GUEST, unregistred user! 2002-06-08 #40 就像上面的说的,要分情况来,比如指针类的,就不能比较了,有的时候根本没有区分大小 的必要,也没有一个合适的标准