类TList的排序方法如何工作?此方法是否仅以列表元素仅上升/下降的方式排序? 请看下面的代码。
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指针指向什么?他们不需要初始化吗?
答案 0 :(得分:3)
首先PInteger(item1)^
代表什么?
Item1
是Pointer,是TPointerList
中存储的项目的地址。PInteger
是一个类型化指针,这意味着该指针指向一个地址,在该地址中需要找到一个整数(四个字节)。^
解除引用符号,您可以使用指针指示编译器您要使用存储在指针当前指向的地址中的数据PInteger(item1)^
您正在执行typecast。换句话说,您告诉编译器将指针Item1
视为PInteger
,然后取消引用它以使用存储在地址Item1
的数据/值现在回到你的代码。您的函数需要从列表中指向Items(Integers)的两个指针,然后您比较存储在这些地址中的数据(通过解除引用)。这意味着列表负责给你的函数指针,实际上如果ItemCount小于1,你的函数将不会被执行。
注意:您需要了解如果指针指向除整数之外的其他内容(或给出未定义的行为),此函数将失败。