局部变量的语法绝对到具有一些偏移量的另一个变量

时间:2011-12-16 22:23:52

标签: delphi

有没有办法可以声明一个绝对地址的变量,该变量对它所引用的变量有一些偏移量。例如,而不是:

function RefCount(const s: string): Integer;
begin
  Result := PInteger(Integer(s) - 8)^;
end;

我有什么方法可以做:

function RefCount(const s: string): Integer;
var
  Count: PInteger absolute s {- 8 ?} ;
begin
  Result := Count^;
end;

(这个例子只是为了说明,它不一定有用..)

2 个答案:

答案 0 :(得分:7)

不,我不认为有一个扩展的语法' absolute个关键字。文档是here,据我所知,没有与此关键字相关的未记录的功能。

答案 1 :(得分:4)

您提出的问题没有语法。

但是,您可以使用指针算法(如果您使用的是支持它的版本),例如:

function RefCount(const s: string): Integer; 
begin 
  if s <> '' then
    Result := (PInteger(s) - 2)^; 
  else
    Result := 0; 
end; 

更可靠的方法是使用StrRec记录类型,这是String内部实际包含的内容:

function RefCount(const s: string): Integer; 
begin 
  if s <> '' then
    Result := (PStrRec(s) - 1)^.refCnt
  else
    Result := 0;
end; 

或者,非指针算术版本:

function RefCount(const s: string): Integer; 
begin 
  if s <> '' then
    Result := PStrRec(LongInt(s) - SizeOf(StrRec))^.refCnt
  else
    Result := 0;
end; 

BTW,从D2009 +开始,System单元有自己的StringRefCount()函数,可以检索String的引用计数。