L
leoleoleo
Unregistered / Unconfirmed
GUEST, unregistred user!
如果我没记错的话String应该是一个指针,指向字符串实际存储的地址(内容和长度)
可是写代码验证时,奇怪的事情发生了
------------------代码如下-----------------------
procedure TForm1.Button1Click(Sender: TObject);
var
szStr_1:string;
pChrChar;
pInt:^Integer;
begin
Memo.Clear;
szStr_1:='abc';
pInt := addr(szStr_1);
Memo.Lines.Add(Format('Addr(szStr_1)
Address:%x
Content:%x', [Integer(pInt), pInt^]));
pChr := Addr(szStr_1[1]);
Memo.Lines.Add(Format('Addr(szStr_1)
Address:%x
Content:%x', [Integer(pInt), pInt^]));
Memo.Lines.Add(Format('Addr(String[1]
Address:%x
Content:%s', [Integer(pChr), pChr^]));
end;
---------------------------运行结果如下------------------------
Addr(szStr_1)
Address:12F59C
Content:*46C1AC*
Addr(szStr_1)
Address:12F59C
Content:*D62174*
Addr(String[1]
Address62174
Content:a
*中的内容应该指向字符串存放地址,可是两次结果竟然不一样
在这期间只有一句 pChr := Addr(szStr_1[1]);
难道Addr(szStr_1[1]),会影响szStr存放的指针值么?
百思不得其解,盼高手回答
可是写代码验证时,奇怪的事情发生了
------------------代码如下-----------------------
procedure TForm1.Button1Click(Sender: TObject);
var
szStr_1:string;
pChrChar;
pInt:^Integer;
begin
Memo.Clear;
szStr_1:='abc';
pInt := addr(szStr_1);
Memo.Lines.Add(Format('Addr(szStr_1)
Address:%x
Content:%x', [Integer(pInt), pInt^]));
pChr := Addr(szStr_1[1]);
Memo.Lines.Add(Format('Addr(szStr_1)
Address:%x
Content:%x', [Integer(pInt), pInt^]));
Memo.Lines.Add(Format('Addr(String[1]
Address:%x
Content:%s', [Integer(pChr), pChr^]));
end;
---------------------------运行结果如下------------------------
Addr(szStr_1)
Address:12F59C
Content:*46C1AC*
Addr(szStr_1)
Address:12F59C
Content:*D62174*
Addr(String[1]
Address62174
Content:a
*中的内容应该指向字符串存放地址,可是两次结果竟然不一样
在这期间只有一句 pChr := Addr(szStr_1[1]);
难道Addr(szStr_1[1]),会影响szStr存放的指针值么?
百思不得其解,盼高手回答