Как получить значение с плавающей запятой, на которое указывает указатель? - PullRequest
1 голос
/ 05 апреля 2010

В моем приложении я создал список типов TList, в котором я храню указатели на 1 строковое и 2 плавающих (действительные) значения для каждых 3 элементов.

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

Затем я хочу получить значения из списка, но я могу сделать это только для строки

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

Но я не смог получить значения с плавающей запятой, поскольку a := real(lList...) приведет к недопустимой ошибке приведения типа.

Так что мне делать, чтобы получить значения с плавающей точкой?
Конечно, у меня есть вопрос, действительно ли приведение строки даст мне строковое значение. Я плохо разбираюсь в вещах, поэтому не знаю, как это сделать.

Ответы [ 2 ]

5 голосов
/ 05 апреля 2010

Я бы порекомендовал вам создать запись:

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

, а затем создайте общий список этого типа:

var
  MyRecordList: TList<MyRecord>;

и оттуда вы сможете легко получить доступ к своим данным в списке.

Попытка сохранить данные в TList с определенными типами данных в определенных позициях, как это, является гораздо более сложной задачей, чем необходимо.

2 голосов
/ 05 апреля 2010

Я согласен с Ником. Но ты все равно можешь делать то, что делаешь.

Если «a» относится к типу «Real»,

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

или, если 'a' - указатель на вещественное (^ Real),

a := aList.Items[i];

для строк, сохраните адрес первого элемента (конечно, вам нужно проверить наличие пустых строк),

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

или используйте 'PChar' и сохраните адрес, на который он указывает,

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