Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Массив из переменных [D7, XP]


Страницы:   1 2 3

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]

+
хотя, ИМХО, массив вариантов был бы лучше.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо