关于record自定义类型的简单问题(50分)

  • 主题发起人 主题发起人 叮叮当当
  • 开始时间 开始时间
to DreamTiger,Pearl:
明白了,谢谢你们的回答!
 
CompareMem比较的只是内存,能够得出相等的结果只是[red]碰巧[/red]两块内存相同而已。
比如:
A: Array[0..3] of Char;
B: Integer;
begin
FillChar(A,#0,4)
//用全零填充数组所在的内存
B := 0
//不用解释了吧
这时CompareMem(@A,@B,4)为真,
但这不成为可以用它来比较字符数组和整数是否相等的理由的。
为特定的数据结构写特定功能的函数,这在编程过程中是很常见的,还是老实写个函数吧。
 
我觉得你定义的A,B只是类型的结构,而不是类型,所以不能比较!
 
to Bxch_1000,
你的方法是可以的.因为DELPHI用引用机制,对于同一个字符串,DELPHI不会另开内存,
而是直接引用该内存单元,只是在记数器上+1.
a.a='123';b.a:='123';因为他们指向的内存是一样的,所以用comparemem得出的结果是
一样的.
 
最后的回答是关键,我又看了D5开发人员指南
 
to szf:
>>CompareMem比较的只是内存,能够得出相等的结果只是[red]
碰巧[/red]两块内存相同而已。
并不是碰巧,如过Record中没有指针类型或字符串类型,用CompareMem来比较
Record是没问题的,如果有指针类型或字符串类型就不一定了。

to BeginDelphi:
谢谢你对引用机制的说明,
 
来自: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可以允许它们相互赋值,但比较就不行了。
 
两个类型相同的变量当然可以直接赋值,赋值号右边是左边类型相容的变量就可以。
 
叮叮当当:
是你老在提前这贴,还是 BBS 有Bug ?
 
叮当当:
兄弟,怎么我每次刷新大富翁的页面,这个贴子都是在前面。谁能告诉我是什么回事
????(你千万不要告诉我,你就坐在机器旁边不停地提前:))
 
类型是不能比较的,只有两个变量之间之间可以互相比较
你的程序应该这样;

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..
 
叮当当:
兄弟,怎么我每次刷新大富翁的页面,这个贴子都是在前面。谁能告诉我是什么回事
????(你千万不要告诉我,你就坐在机器旁边不停地提前:))

就是就是,是怎么回事?
 
可以,但先夫值
 
还没试。不过我觉得你定义的A,B都是抽象的类,没有实例化。怎么可以比较呢?

如果你实例化了,就可以比较。
 
var
A, B: record
X, Y: Integer;
Z: array[0..2] of Byte;
end;

这样定义出来A和B就是类型的实例了,是变量,watter 和 lp414 理解错了。
我也不知道这个帖子是怎么回事,大概是置顶了或有人帮我顶吧:)
 
我认为没有必要比较2个RECORD的大小,你比较了要知道什么结果了???
 
TO: 张无忌
不是比较大小,是想比较内容(所有子项)是否相等。
 
那就简单了,用这么复杂吗?
 
TO: 张无忌
你的意思,还是自己针对这种类型编个函数A.X、A.Y……逐一与B的成员比较吗?
 
就像上面的说的,要分情况来,比如指针类的,就不能比较了,有的时候根本没有区分大小
的必要,也没有一个合适的标准
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部