A
Archerfl
Unregistered / Unconfirmed
GUEST, unregistred user!
这是我写的一段代码:
procedure MyMove(const Source;var Dest;ByteCounts: Integer);
var
S,D: array of Byte;
i: Integer;
begin
if (@Source = @Dest) or (ByteCounts <= 0) then Exit;
S := @Source;
D := @Dest;
if Integer(D) > Integer(S) then
for i := ByteCounts - 1 downto 0 do
D := S
else
for i := 0 to ByteCounts - 1 do
D := S;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
m,n: Integer;
begin
m := 10;
MyMove(m,n,4);
ShowMessage(IntToStr);
end;
程序很简单,只是想对传入MyMove过程的任何变量从源到目的按字节拷贝其内容。
但是,在MyMove过程的局部变量声明中,假如我如上面这种方式用动态数组array of Integer,
那么编译后可以通过,但一运行后,会报警说:“Project Project1.exe raised exception
class EInvalidPointer with message 'Invalid pointer operation'.”。而我把声明形式
改为var S,D: PChar后一切 OK!
不知道这是为什么,动态数组实质只是一个指针,那么我通过强制转换把源和目的的地址赋
给它后就可以利用其数组特性,数组名[下标]的方式进行对数组元素的操作,但为什么会报警呢?
望各位高手指点!
procedure MyMove(const Source;var Dest;ByteCounts: Integer);
var
S,D: array of Byte;
i: Integer;
begin
if (@Source = @Dest) or (ByteCounts <= 0) then Exit;
S := @Source;
D := @Dest;
if Integer(D) > Integer(S) then
for i := ByteCounts - 1 downto 0 do
D := S
else
for i := 0 to ByteCounts - 1 do
D := S;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
m,n: Integer;
begin
m := 10;
MyMove(m,n,4);
ShowMessage(IntToStr);
end;
程序很简单,只是想对传入MyMove过程的任何变量从源到目的按字节拷贝其内容。
但是,在MyMove过程的局部变量声明中,假如我如上面这种方式用动态数组array of Integer,
那么编译后可以通过,但一运行后,会报警说:“Project Project1.exe raised exception
class EInvalidPointer with message 'Invalid pointer operation'.”。而我把声明形式
改为var S,D: PChar后一切 OK!
不知道这是为什么,动态数组实质只是一个指针,那么我通过强制转换把源和目的的地址赋
给它后就可以利用其数组特性,数组名[下标]的方式进行对数组元素的操作,但为什么会报警呢?
望各位高手指点!