C
CADVector
Unregistered / Unconfirmed
GUEST, unregistred user!
DELPHI中的动态数组可以再使用的时候动态分配内存,比如
var
a1:array of integer;
a2:array[0..1] of integer;
begin
setlength(a1,2);
a2[0]:=1;
a2[0]:=2;
a1:=@a2;//把A2的首地址赋给A1
a1:=@a2[0];//把A2的首地址赋给A1
//这里这两句话实现的功能一样.说明静态数组的数组名中存着这个数组的第一个元素,
那么再执行
f.write(a2,sizeof(integer)*2);//这句话可以将A2中的数据写入一个文件
而 f.write(a1,sizeof(integer)*2);//这句话只能将A1中每个元素的地址写入到文件中
如果要实现与f.write(a2,sizeof(integer)*2);同样的功能,需要该成
f.write(a1[0],sizeof(integer)*2);
这说明write 函数中第一个参数必须传一个缓存的第一个字符,而不是缓存的地址
end;
以上的解释不知道对不对,望高手指点
本人还有一个疑问:
procdure aaa(var a:array of integer)
var
i,iCount:integer;
begin
iCount:=High(a);
for i:=0 to iCount do
begin
a:=10;
end;
end;
procdure bbb( a:array of integer)
var
i,iCount:integer;
begin
iCount:=High(a);
for i:=0 to iCount do
begin
a:=10;
end;
end;
procedure ccc;
var
a:array of integer;
b:array[0..2] of integer;
begin
setlength(a,2);
aaa(b);//该过程可以将b内容修改,因为是引用参数,将B的地址传给了函数AAA的参数
bbb(b);//该过程不能修改b中的内容,因为是传数值,是将B中的内容复制给了函数BBB中的参数
aaa(a);//该过程也能将a的内容修改,
bbb(a);//将a 中的值传给了BBB函数中的参数,那么因为a本来就是地址,也应该可以修改a中的内容,但实际情况不行,为什么
end;
问题:
bbb(a);//将a 中的值传给了BBB函数中的参数,那么因为a本来就是地址,也应该可以修改a中的内容,但实际情况不行,为什么
var
a1:array of integer;
a2:array[0..1] of integer;
begin
setlength(a1,2);
a2[0]:=1;
a2[0]:=2;
a1:=@a2;//把A2的首地址赋给A1
a1:=@a2[0];//把A2的首地址赋给A1
//这里这两句话实现的功能一样.说明静态数组的数组名中存着这个数组的第一个元素,
那么再执行
f.write(a2,sizeof(integer)*2);//这句话可以将A2中的数据写入一个文件
而 f.write(a1,sizeof(integer)*2);//这句话只能将A1中每个元素的地址写入到文件中
如果要实现与f.write(a2,sizeof(integer)*2);同样的功能,需要该成
f.write(a1[0],sizeof(integer)*2);
这说明write 函数中第一个参数必须传一个缓存的第一个字符,而不是缓存的地址
end;
以上的解释不知道对不对,望高手指点
本人还有一个疑问:
procdure aaa(var a:array of integer)
var
i,iCount:integer;
begin
iCount:=High(a);
for i:=0 to iCount do
begin
a:=10;
end;
end;
procdure bbb( a:array of integer)
var
i,iCount:integer;
begin
iCount:=High(a);
for i:=0 to iCount do
begin
a:=10;
end;
end;
procedure ccc;
var
a:array of integer;
b:array[0..2] of integer;
begin
setlength(a,2);
aaa(b);//该过程可以将b内容修改,因为是引用参数,将B的地址传给了函数AAA的参数
bbb(b);//该过程不能修改b中的内容,因为是传数值,是将B中的内容复制给了函数BBB中的参数
aaa(a);//该过程也能将a的内容修改,
bbb(a);//将a 中的值传给了BBB函数中的参数,那么因为a本来就是地址,也应该可以修改a中的内容,但实际情况不行,为什么
end;
问题:
bbb(a);//将a 中的值传给了BBB函数中的参数,那么因为a本来就是地址,也应该可以修改a中的内容,但实际情况不行,为什么