A
Another_eYes
Unregistered / Unconfirmed
GUEST, unregistred user!
当你调用procedure aaa(const s: string);后发觉传入的s被清空了你会不会觉得很神奇呢?
其实很简单:
procedure aaa(const s: string);
var
ss: string;
n: Integer;
begin
n := Integer(s);
ss := string;
if PInteger(n-8)^>0 then
Dec(PInteger(n-8)^);
end;
调用:
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
s:=StringOfChar('a', 100);
ShowMessage(s);
aaa(s);
ShowMessage(s);
end;
调用aaa(s)后s就被清空了。
原理: 非常简单, 只不过手工改变了字符串引用计数而已。
其实很简单:
procedure aaa(const s: string);
var
ss: string;
n: Integer;
begin
n := Integer(s);
ss := string;
if PInteger(n-8)^>0 then
Dec(PInteger(n-8)^);
end;
调用:
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
s:=StringOfChar('a', 100);
ShowMessage(s);
aaa(s);
ShowMessage(s);
end;
调用aaa(s)后s就被清空了。
原理: 非常简单, 只不过手工改变了字符串引用计数而已。