为什么静态数组的数据在内存中不是连续存放的? 何以见得?procedure TForm1.Button1Click(Sender: TObject); var a:array[0..4,0..4] of integer; i,j:integer; p:pchar; b:array[0..4] of integer; begin ........ a在内存中的地址是: a[0]:$12F5C4 a[1]:$12F5D8 a[2]:$12F5EC a[3]:$12F600 a[4]:$12F614这不是连续的内存地址么?
procedure Trlp1.Button1Click(Sender: TObject); var s1:string; p1:^integer; p2:^integer; i,j,i1:integer; begin //sskk[,], ssk[]; 为静态数组 i1:=0; for i:=0 to 3 do for j:=0 to 3 do begin sskk[i,j]:=i1; i1:=i1+1; end; p1:=@sskk[1,3]; ssk[0]:=p1^; s1:=inttostr(ssk[0]); for i:=0 to 5 do s1:=s1+' '+inttostr(ssk[i]); edit3.text:=s1; end;//如果是连续内存地址 最后edit3.text:=7 8 9 10 11 12,但实际上不是的!?
何以见得?procedure TForm1.Button1Click(Sender: TObject);
var
a:array[0..4,0..4] of integer;
i,j:integer;
p:pchar;
b:array[0..4] of integer;
begin
........
a在内存中的地址是:
a[0]:$12F5C4
a[1]:$12F5D8
a[2]:$12F5EC
a[3]:$12F600
a[4]:$12F614这不是连续的内存地址么?
var
s1:string;
p1:^integer;
p2:^integer; i,j,i1:integer;
begin //sskk[,], ssk[]; 为静态数组
i1:=0;
for i:=0 to 3 do
for j:=0 to 3 do
begin
sskk[i,j]:=i1;
i1:=i1+1;
end;
p1:=@sskk[1,3];
ssk[0]:=p1^;
s1:=inttostr(ssk[0]); for i:=0 to 5 do s1:=s1+' '+inttostr(ssk[i]); edit3.text:=s1;
end;//如果是连续内存地址 最后edit3.text:=7 8 9 10 11 12,但实际上不是的!?
我也希望我的代码是错的!因为我的目的是想将一个二维数据中的一部分数据通过指针的方式赋给一个一维数组!
以上代码的结果是 7 0 0 0 0 0
如果是连续存放的那么第一个“7”正确后后面就应该是8 9 10 11 12!
那位高手能帮我找出代码的错误,或解决的办法吗?
谢谢!
ssk[1] .. ssk[5]呢?你哪里赋值了?不是0才怪!
ssk[0]:=p1^;
并不能实现你的目的:把p1指向的内容赋给数组ssk,这里只是把第一个值赋给了ssk[0],而ssk[1]...都没有赋值。
我自己将指针搞混了!
我是想将一维数组的第一元素内存地址设为与二维数组某一元素的内存地址设为相同!这样如果一维数组元素的值发生改变那么同时二维数组中与一维数组地址相同的元素也就自动被改变了!不知能否实现?