关于记录Trecord的问题(100分)

  • 主题发起人 主题发起人 chen_ht
  • 开始时间 开始时间
C

chen_ht

Unregistered / Unconfirmed
GUEST, unregistred user!
我设置一个记录:
type
messreco=record
t,t1:boolean;
m:integer;
d,c1,c2:array[0..3] ofdo
uble;
m1:array[0..3] of integer;
//**1
beca,la_s:string;
end;

var
m1,m2:array of messreco;
然后 m1:=m2;
此时改变m2 , m1也跟着变化,如何让m1不跟着变化呢?
 
没办法,因为结构的:=是指针赋给,除非你重载结构的:=,但因为结构是全局的东东,这样
也不太好,不然就编一个函数Assign(m1,m2),然后在这里进行
m1.t := m2.t
m1.t1 := m2.t1
....
 
用Move(m1, m2, sizeof(m1))
 
这不是记录的问题,因为M1和M2都是动态数组,而在Delphi中动态数组和指针具有同样的性质,
当用:=符号赋值的时候实际上只是把两个指针指向同一内存空间,所以改一个就会改变第二个.
可以用Copy函数来复制一个动态数组
 
在Delphi中是不可以重载运算符的,而且即使用可以,也需要在重载运算符的过程中循环.
 
type
TEmployeeInfo=record
SID : string;
ID : string;
Name : string;
Selected : boolean;
end;
TEmployeeArray = array of TEmployeeInfo;
var
EmpList1,EmpList2 : TEmployeeArray;
begin
//..........
EmpList2 := Copy(EmpList1);
end;
 
同意ysai的意见。
 
to ysai:用你的方法后有如下错误
type
TEmployeeInfo=record
SID : string;
ID : string;
end;
TEmployeeArray = array[0..1] of TEmployeeInfo;

TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
EmpList1,EmpList2 : TEmployeeArray;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
EmpList1[0].id:='kk';
EmpList1[1].id:='kk';
EmpList1[0].sid:='kk';
EmpList1[1].sid:='kk';
EmpList2 := Copy(EmpList1);
end;

end.


[Error] Unit1.pas(36): Incompatible types
 
我的声明是
TEmployeeArray = array of TEmployeeInfo;
而你的是
TEmployeeArray = array[0..1] of TEmployeeInfo;
一个是动态数组,一个是固定数组,固定数组会出错,但动态的没问题
固定数组直接用=
procedure TForm1.FormCreate(Sender: TObject);
begin
EmpList1[0].id:='kk';
EmpList1[1].id:='kk';
EmpList1[0].sid:='kk';
EmpList1[1].sid:='kk';
EmpList2 := EmpList1;
//不用copy,用=
EmpList1[1].sid:='kkkk';
//改1
ShowMessage(EmpList1[1].sid);
//显示kkkk
ShowMessage(EmpList2[1].sid);
//显示kk
end;
 
碧血剑和ysai的方法都不错。
 
后退
顶部