![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Массив из переменных [D7, XP]
jetairnav © (2015-12-18 09:42:00)Всем привет! Вопрос такой: существует ли механизм перечисления переменных? Конкретно хочется что-то типа такого:
var ArrayOfVar:array[0..n] of Pointer (@Int, @Double, @Str....);
Value:= ArrayOfVar[index]^;
Юрий Зотов (2015-12-18 13:36:00) [41]Всеми четырьмя конечностями голосую за [2].
KSergey (2015-12-18 13:33:00) [42]> Похоже, что по сути, проблема вот где: вы берете наименованный
Извиняюсь, опечатки, мешающие пониманию
Должно быть так:
Похоже, что проблема вот где: вы берете н еименованный
KSergey (2015-12-18 13:32:00) [43]Похоже, что по сути, проблема вот где: вы берете наименованный указатель и пытаетесь разыменовать хранящееся значение по этому указателю. Понятно, получаете мусор.
Сначала нужно сделать, чтобы указатель был какого-то определённого типа, а уж потом разыменовывать его.
Например как-то так:
procedure TForm1.Button22Click(Sender: TObject);
type
PInteger = ^Integer;
var
ArrayOfPointers: array[0..10] of Pointer;
a: Integer;
i: Integer;
begin
a := 88;
ArrayOfPointers[0] := @a;
i := PInteger(ArrayOfPointers[0])^;
end;
Вот теперь у нас всё будет хорошо и в i окажется значение 88.
KSergey (2015-12-18 13:27:00) [44]Вот такой код ожидаемо не компилируется:
procedure TForm1.Button22Click(Sender: TObject);
var
ArrayOfPointers: array[0..10] of Pointer;
i: Integer;
begin
i := Real(ArrayOfPointers[0]^);
end;
но вы зачем-то его приводите в качестве примера:
r:= Real(ArrayOfPointers[0]^);
Вопрос: зачем вы задаёте вопрос о неработоспособности не компилируемого кода?
Вы можете точно задать вопрос? ответ-то вам нужен, а не кому-то еще.
jetairnav (2015-12-18 12:06:00) [45]
Type TParsedISB = {packed} record // Измерения
Addr: byte;
Counter: byte;
SW: word;
Tsys: Real;
Data: array[0..2]of Real;
dV:array[0..2] of Real;
end;
var
ParsedISB: TParsedISB;
TParsedISB_Arr: array of TParsedISB_Message;
ArrayOfPointers: array[0..n] of Pointer=(
@ParsedISB.AddrIIB,
@ParsedISB.Counter,
@ParsedISB.SW,
@ParsedISB.Tsys,
@ParsedISB.Data[0]
...)
...
begin
...
ParsedISB_Message:= ParsedISB_Message_Arr[1];
// chart1.series[0].Add(Real(ArrayOfPointers[1]^))
r:= Real(ArrayOfPointers[0]^);
...
end;
KSergey (2015-12-18 11:59:00) [46]Что значит "шлак"?
Хорошо бы минимальный пример реального кода, на котором понятно что хотите и где шлак
jetairnav (2015-12-18 11:57:00) [47]
> sniknik © (18.12.15 10:14) [1]
Почему-то не работает через var ArrayOfVar:array[0..n] of Pointer (@Int, @Double, @Str....)
В Value какой-то шлак((
sniknik (2015-12-18 10:14:00) [48]> Конкретно хочется что-то типа такого:
и в чем проблема? конкретно так вот и делай... ну может var на const поменять (вроде как инициализация на var нововведение, а const еще с паскаля работало)
sniknik (2015-12-18 10:14:00) [49]+
хотя, ИМХО, массив вариантов был бы лучше.