Size: a a a

2020 March 02

GB

George Bakhtadze in Delphi & Lazarus
доплачивают за Сбер скорее всего. это куда вреднее D7 :)
источник

FT

Fistashka Tryam in Delphi & Lazarus
Всем привет, кто работал с двумерными массивами через указатели ? Помогите чем сможете. Есть двумерный массив расположенный в памяти. Есть функция указатель на адрес в памяти. Как вывести значения масссива. Как правильнее объявить переменные и типы. Кидаю код, подскажите кто чем сможет
источник

FT

Fistashka Tryam in Delphi & Lazarus
procedure TForm1.Button27Click(Sender: TObject);
type
 TIntArr=array of array of integer;
 pIntArr=^TIntArr;
var
 p:pointer;
 v:oleVariant;
 x,y:integer;
 pArr:pIntArr;
begin
  v:=Mat.Get2dArray; //Указатель на адрес в памяти
  Pinteger(@p)^:=v;
  pArr:=pIntArr(p);

  for x:=0 to 10 do
     begin
       for y:=0 to 10 do
         begin
             ListBox1.Items.Add(pArr^[x,y].toString);
         end;
    end;
end;
источник

FT

Fistashka Tryam in Delphi & Lazarus
Массив в памяти 10x10
источник

DB

Dmitry Belkevich in Delphi & Lazarus
лучше с oleVariant работать без указателей как с массивом variant
источник

DB

Dmitry Belkevich in Delphi & Lazarus
v[i][j] по идее должно быть достаточно в цикле
источник

FT

Fistashka Tryam in Delphi & Lazarus
О Дмитрий приветствую, там функцию возвращает именно указателб
источник

DB

Dmitry Belkevich in Delphi & Lazarus
ну ок. указатель на вариант, если как есть не работает, то можно разименовать
источник

DB

Dmitry Belkevich in Delphi & Lazarus
если есть какой-то указатель на вариантый массив - то стоит так с ним и работать
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Как с вариантным массивом. внутри должна случится магия сама. нет необходимости в дополнительной обвязке
источник

FT

Fistashka Tryam in Delphi & Lazarus
Сейчас попробую
источник

DB

Dmitry Belkevich in Delphi & Lazarus
гугли как вообще с oleVariant массивами работать
источник

NR

Nikolay Ryabykh in Delphi & Lazarus
Только если и работа с массивом и указателями на элементы надо помнить, что при изменение размера массива, он может поменять расположение в памяти, и указатели станут не валидны
источник

DB

Dmitry Belkevich in Delphi & Lazarus
с указателями будут сложности, нет необходимости мне кажется их сюда тащить, нужно работать нативно как с обычным массивом oleVariant, тем более что это он и есть
источник

DB

Dmitry Belkevich in Delphi & Lazarus
даже если и через указатель
источник

FT

Fistashka Tryam in Delphi & Lazarus
Я знаю что этот массив точно имеет размер 10x10 и точно там тип Integer
источник

DB

Dmitry Belkevich in Delphi & Lazarus
ну и отлично. осталось до данный добраться
источник

FT

Fistashka Tryam in Delphi & Lazarus
Dim p as Long

Data=Mat.Get2dArray
x=16
y=32
p=Data(x,y)
источник

FT

Fistashka Tryam in Delphi & Lazarus
Вот код vb он рабочий
источник

DB

Dmitry Belkevich in Delphi & Lazarus
можно или как есть попробовать. или разименовать. вот ты разименовние делаешь:
 Pinteger(@p)^:=v;
источник