如何重新创建检索对象最高元素的函数?

Iva*_*nov 2 arrays delphi pascal

我的计划是创建一个函数来检索对象的最高元素,可以说是数组的上限.换句话说,我正在尝试获取函数High()的代码.

到目前为止我尝试了什么:

 function High2(var X):integer;
 begin
   Result:=Pbyte(Cardinal(@X)-1)^-1;
 end;
Run Code Online (Sandbox Code Playgroud)

上面的函数应该读取对象中第一个元素(数组/字符串)的位置之前的值(长度)并返回它减少1.但是它不能在静态或动态数组类型上检索正确的结果.

如何在Pascal中重新创建High()函数?

All*_*uer 5

High()(和Low())函数被称为"标准函数",这意味着它们是编译器固有的.像Write和Writeln一样,它们并不像普通的Pascal函数声明那样存在.编译器确保它们在"系统"单元范围内仅仅是为了方便,并允许在其他范围内使用相同名称的函数.这也允许您通过使用System.High()显式引用系统单元版本来限定它们.由于它们是内在的,编译器将自动为正在考虑的类型生成正确的代码序列.这也意味着尝试复制它们的全部功能几乎是不可能的.只需坚持内在的标准功能.