p; A := B;
即可对数组进行赋值;在动态数组中就要倍加小心,请看
var
A, B: array of Integer;
begin
Setlength(A, 10);
SetLength(B, 10);
B[1] := 50;
A := B;
B[1] := 100;
end;
a[1]是多少呢?按照常理A[1]的值应该是附值前的50,但恰恰相反A[1]的值是附值后B[1]再次被赋的值,
100动态数组中A := B;仅仅是将动态数组A 的指针指向动态数组B,而并不是像我们希望的那样为A开辟一
块空间。如果非要为A开辟一块空间就要用Copy来复制B的数据。
AnsiString也是动态数组,所以同样的情况也存在于String类型。
特殊的数组:
本来字符串想单独说一说,但是却因为它具有太多的动态数组特性所以不单独说了。
再一个,这里的代码和说的以后你很可能是用不到的,但是能加深你对ObjectPascal的理解。
在设计时你会知道它是如何工作的,通过这些你会更有效率的使用它。
大多数字符串与其说是数组倒不如说他是个结构。但是我们用他的数组特性更多一些。
1.ShorString:是为了与老的Pascal兼容而保留的类型。最大255个字符。
Type
TShortString
Length:Byte;
Data:array[1..Length] of Char;
end;
从结构上可以看出ShortString最大只能保存255个字符。我们可以做个实验
var
k:ShortString;
begin
k:='I am a Delphi fan!';
k[0]:=Char(13);//k.Length被置为13
showmessage(k);
end;
///两种方法效果相同
var
k:ShortString;
p:^Byte;
begin
k:='I am a Delphi fan!';
p:=@k[1];
Dec(p,1);
p^:=13;//k.Length被置为13
showmessage(k);
end;
运行一下看看会出什么结果,呵呵。
为什么Short的数组下限是0呢?想一想Byte和Char的关系我不想多说.
2.AnsiString:标准的字符串,以Nil结尾。
Type
TAnsiString=record
allocSiz: LongWord;//分配的大小
ReferencCount:LongWord; //引用次数
Length:LongWord; //字符串长度
Data:array[1..(Length+1)] of AnsiChar;
&
上一页 [1] [2] [3] [4] [5] [6] 下一页