开发者

How to get a float value the pointer points to?

开发者 https://www.devze.com 2022-12-25 12:19 出处:网络
In my app, i\'ve created the TList type list where i store the pointers to 1 string and 2 float(real) values for every 3 items.

In my app, i've created the TList type list where i store the pointers to 1 string and 2 float(real) values for every 3 items.

aList.Add(@sName); //string
aList.Add(@x1); //float
aList.Add(@x2); //float

Then, i want to get the values out from the list, but i could only do that for string

sStr := string(lList.items[i]);

But i couldn't get the float values as a := real(lList...) will result in an invalid typecast error.

So what do i do to get the 开发者_如何学Gofloat values?

Of course i have a question if that string casting will actually give me the string value. I'm not good at pointer stuff so i don't know how to do it.


I'd recommend that you create a record:

TMyRecord = record
  sName: String
  x1: Double;
  x2: Double;
end;

and then create a generic list of that type:

var
  MyRecordList: TList<MyRecord>;

and from there, you should be able to easily access your data in the list.

Trying to store data in a TList with specific data types in specific positions like that is way more trouble that it needs to be.


I agree with Nick. But you can do what you're doing anyway.

If 'a' is of type 'Real',

a := Real(aList.Items[i]^);

or if 'a' is a pointer to a Real (^Real),

a := aList.Items[i];

for strings, store the address of the first element (of course you need to test for empty strings),

s := 'Hello World';
aList.Add(@S[1]);
[...]
s1 := string(aList[i]);

or use a 'PChar' and store the address where it is pointing to,

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

精彩评论

暂无评论...
验证码 换一张
取 消