Delphi 如何获取指针指向的浮点值?

Delphi 如何获取指针指向的浮点值?,delphi,pointers,floating-point,delphi-2009,Delphi,Pointers,Floating Point,Delphi 2009,在我的应用程序中,我创建了TList类型列表,在其中,每3项存储指向1个字符串和2个浮点(实数)值的指针 aList.Add(@sName); //string aList.Add(@x1); //float aList.Add(@x2); //float 然后,我想从列表中获取这些值,但我只能对字符串执行此操作 sStr := string(lList.items[i]); 但是我无法获取浮点值,因为a:=real(lList…将导致无效的类型转换错误 那么我该怎么做才能得到浮点值呢? 当

在我的应用程序中,我创建了TList类型列表,在其中,每3项存储指向1个字符串和2个浮点(实数)值的指针

aList.Add(@sName); //string
aList.Add(@x1); //float
aList.Add(@x2); //float
然后,我想从列表中获取这些值,但我只能对字符串执行此操作

sStr := string(lList.items[i]);
但是我无法获取浮点值,因为
a:=real(lList…
将导致无效的类型转换错误

那么我该怎么做才能得到浮点值呢?

当然,我有一个问题,如果字符串转换实际上会给我字符串值。我不擅长指针,所以我不知道怎么做。

我建议您创建一个记录:

TMyRecord = record
  sName: String
  x1: Double;
  x2: Double;
end;
然后创建该类型的通用列表:

var
  MyRecordList: TList<MyRecord>;
var
MyRecordList:TList;
从那里,您应该能够轻松访问列表中的数据


尝试将数据存储在TList中,并将特定数据类型存储在特定位置(如该位置)更麻烦。

我建议您创建一个记录:

TMyRecord = record
  sName: String
  x1: Double;
  x2: Double;
end;
然后创建该类型的通用列表:

var
  MyRecordList: TList<MyRecord>;
var
MyRecordList:TList;
从那里,您应该能够轻松访问列表中的数据


试图将数据存储在一个TList中,并将特定的数据类型存储在特定的位置上,这需要更多的麻烦。

我同意Nick的观点。但是你无论如何都可以做你正在做的事情

如果“a”是“Real”类型

a := Real(aList.Items[i]^);
或者如果“a”是指向实数(^Real)的指针

对于字符串,存储第一个元素的地址(当然需要测试空字符串)

或者使用“PChar”并存储其指向的地址

s := 'Hello World';
aList.Add(@s^);
[...]
s1 := PChar(aList[i]);

我同意尼克的看法。但是你无论如何都可以做你正在做的事情

如果“a”是“Real”类型

a := Real(aList.Items[i]^);
或者如果“a”是指向实数(^Real)的指针

对于字符串,存储第一个元素的地址(当然需要测试空字符串)

或者使用“PChar”并存储其指向的地址

s := 'Hello World';
aList.Add(@s^);
[...]
s1 := PChar(aList[i]);

+我正要说同样的话,但尼克抢先说了。您可以在
Generics.Collections
单元中找到generic TList。但在Delphi2009中,它有一些奇怪的编译器怪癖,可能并不总是正常工作。如果您有问题,我建议升级到Delphi2010,它在泛型方面更加稳定。+1。我正要说同样的话,但尼克抢先说了。您可以在
Generics.Collections
单元中找到generic TList。但在Delphi2009中,它有一些奇怪的编译器怪癖,可能并不总是正常工作。如果您有问题,我建议升级到Delphi 2010,它在泛型方面更稳定。有一些数据丢失,但执行这种分配可能会导致访问冲突。将字符串强制转换为指针时,这不会增加其引用计数。因此,当sName超出范围时,指针可能会变得无效。浮动值也是如此。当X1和X2变量超出范围时,指针不再有效。对于无效的类型转换,您可以这样进行类型转换,您可能只是忘记了取消引用指针。Double(lList[I]^)缺少一些数据,但执行这种分配可能会导致访问冲突。将字符串强制转换为指针时,这不会增加其引用计数。因此,当sName超出范围时,指针可能会变得无效。浮动值也是如此。当X1和X2变量超出范围时,指针不再有效。对于无效的类型转换,您可以这样进行类型转换,您可能只是忘记了取消引用指针。双精度(lList[I]^)