0

TList 类的方法 Sort 是如何工作的?此方法是否仅以列表元素仅上升/下降的方式排序?请看下面的代码。

Type 
  PInteger = ^Integer;
Function Compare(Item1, Item2 : Pointer) : Integer;
Begin
 if PInteger(Item1)^ > Pinteger(Item2)^ then Result:= 1
 else if PInteger(Item1)^ < PInteger(Item2)^ then Result:= -1
 else Result:= 0;

End;
 { And, for instance, somewhere we call the method }
 List.Sort(Compare);

现在的问题是,在我编译代码之后,它运行良好,列表以元素升序的方式排序。但我不明白以下行:

PInteger(item1)^ // What does this represent?

item1, item2 的指针指向什么?他们不需要初始化吗?

4

1 回答 1

3

首先PInteger(item1)^/代表什么?

  1. Item1是一个Pointer,存放在里面的一个item的地址TPointerList
  2. PInteger是一个类型化的指针,这意味着这个指针指向一个地址,它可以找到一个整数(四个字节)。
  3. ^解引用符号,您可以将其与指针一起使用,以告诉编译器您要使用存储在指针当前指向的地址中的数据
  4. PInteger(item1)^您正在执行类型转换。换句话说,您告诉编译器将指针Item1视为它,PInteger然后您取消引用它以使用其存储在地址中的数据/值Item1

现在回到你的代码。您的函数需要两个指向列表中项目(整数)的指针,然后您比较存储在这些地址中的数据(通过取消引用)。这意味着列表负责提供给您的函数的指针,实际上如果 ItemCount 小于 1,您的函数将不会被执行。

注意:您需要了解,如果指针指向的不是整数(或给出未定义的行为),此函数将失败。

于 2017-12-27T18:13:29.887 回答