没人回答呀?
我自己已经搞定了,不得不放弃使用动态数组,而改用指针数组。
不过这样一换好像效率提高了,自己也长了不少知识。使用move进行内存拷贝时最好将目的和源都强制转换pointer型,呵呵。欢迎继续讨论,别把我的分给糟蹋了。
我自己已经搞定了,不得不放弃使用动态数组,而改用指针数组。
不过这样一换好像效率提高了,自己也长了不少知识。使用move进行内存拷贝时最好将目的和源都强制转换pointer型,呵呵。欢迎继续讨论,别把我的分给糟蹋了。
好像你的结构中没有P?第二个问题就是对于动态数组,为什么不用SetLength?
我是用SetLength来设置动态数组的长度的,只是此操作与问题没太大关系,所以省略了。
type
TRec1 = Record
Arr: Array of Integer;
end;
TRec2 = Record
Arr: Array[0..4] of Integer;
end;
var
Rec1: TRec1;
Rec2: TRec2;
begin
Rec1.Arr := VarArrayCreate([0,4],varInteger);
ShowMessage(IntToStr(SizeOf(Rec1)));
ShowMessage(IntToStr(SizeOf(Rec2)));
end;你发现结构其实大小完全不一样了吧
p : pointer;我是该使用
move(str, p^, StrLen(str));
还是
move(str^, p^, StrLen(str));另外读p^里的PChar时该怎么做?已经给分了