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



是否有一种方法可以声明具有绝对地址的变量,该地址与它所引用的变量有一定的偏移量。例如,而不是:

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;

(此示例仅供说明,不一定有用…)

不,我不认为absolute关键字有"扩展语法"。文档在这里,据我所知,没有与这个关键字相关的文档特性。

您的请求没有语法。

然而,你可以做的是使用指针算术(如果你使用的是支持它的版本),例如:
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的引用计数。

最新更新