Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

массивы данных   Найти похожие ветки 

 
Игорь_   (2004-09-21 09:38) [0]

Есть массив MyArray = array of array of integer;
подскажите, пожалуйста, как его записать в память с помощью указателя?


 
ЮЮ ©   (2004-09-21 09:46) [1]

type
 TMyArray = array of array of integer;

var
 arr: TMyArray;

arr - это и есть указатель и находится, как не странно, в "памяти" :-)


 
Игорь_   (2004-09-21 10:44) [2]

Имелось в виду несколько другое:
var BytePtr:^ byte;
чтобы присвоить ей адрес конкретного места памяти используется операция @.
var BytePtr:^ byte;
   ByteVal: byte;
   begin
   ByteVal := 255;
   BytePtr :=@ByteVal
можно тоже самое проделать с массивом и, если можно, то как?


 
Amoeba ©   (2004-09-21 10:47) [3]

А в Help или в книжку заглянуть религия не позволяет? Там даже примеры есть.


 
Игорь_   (2004-09-21 10:57) [4]

Ну наверное заглядывал.
С.Бобровский Delphi7 нашел там про это только загадочную фразу, что одной командой это сделать нельзя.
Никита Культин Delphi6 -Вообще ничего не нашел относительно этого.
В Help тоже найти не могу ИБО изучаю Delphi6 только второй месяц.


 
Erik1 ©   (2004-09-21 11:04) [5]

А что тебя смущает, конечно можно, но ненужно. Потому, что если у тебя есть указатель на масив, то емеет смвсл выделеть ему память, а после незабыть освободить ее. Пример:
Type
 TMyArray = array of array of integer;
 PMyArray = ^TMyArray;
...
Var
 MyArray: PMyArray;
Begin
 New(MyArray);
 SetLength(MyArray^, 1);
 MyArray[0,0] := 1;
end;
И гдето
 SetLength(MyArray^, 0);
 Dispose(MyArray);
Хотя непонятно зачем тебе динамически создовать масив. Так с ним неработают.


 
MBo ©   (2004-09-21 11:07) [6]

>загадочную фразу, что одной командой это сделать нельзя
Это правда - двумерный динамический массив представляет собой отдельные блоки памяти, так что придется каждый массив низшего уровня сохранять отдельно.

type
 TA:array of array of Integer;

var a:ta;
begin
SetLength(a,3,3);
теперь a является (неявным) указателем на массив из 3-х указателей на массивы данных, т.е.
a[0] - указывает на первый блок из 3-х чисел и т.д.


 
MBo ©   (2004-09-21 11:09) [7]

>Erik1 ©   (21.09.04 11:04) [5]
>PMyArray = ^TMyArray;
обычно такой подход не нужен


 
Amoeba ©   (2004-09-21 11:10) [8]

Это пример из Help:

The following example uses dynamic arrays (and the IntToStr function declared in the SysUtils unit) to create a triangular matrix of strings.

var

 A : array of array of string;
 I, J : Integer;
begin
 SetLength(A, 10);
 for I := Low(A) to High(A) do
 begin
   SetLength(A[I], I);
   for J := Low(A[I]) to High(A[I]) do
     A[I,J] := IntToStr(I) + "," + IntToStr(J) + " ";
 end;
end;


 
Игорь_   (2004-09-21 11:12) [9]

Вообще-то я учусь на заочных курсах и у меня есть лабораторка в которой написано:
Шаг 9. Создайте обработчик событий для кнопки «Ввод дан-ных». Последовательность действий должна быть такой:
· записать в память сгенерированный двумерный массив вве-денной размерности N;
Вот я и мучаюсь.


 
КаПиБаРа ©   (2004-09-21 11:12) [10]

Игорь_   (21.09.04 10:44) [2]
можно тоже самое проделать с массивом и, если можно, то как?


С динамическим массивом лучше так не делать, т.к. при увеличении размера он "переедет" по другому адресу и все указатели полученные таким образом будут не действительны.

IntegerPtr := @MyArray[3,5] - указатель на 5 элемент массива в 3 строке.

=================================
Когда у тебя есть только молоток,
все похоже на гвоздь.
=================================


 
Amoeba ©   (2004-09-21 11:13) [11]


> Erik1 ©   (21.09.04 11:04) [5]

Не сбивай молодого человека с панталыку!


 
MBo ©   (2004-09-21 11:16) [12]

http://www.delphikingdom.ru/lyceum/seminar.asp?partID=4


 
Игорь_   (2004-09-21 11:35) [13]

До того как сформировать массив размерности N*N я дошел
A : array of array of string;
I : Integer;
begin
SetLength(A, N);
for I := 0 to High(A) do
 SetLength(A[I], N);
end;
а вот как его записать в память (с помощью @)я так и не понял!


 
MBo ©   (2004-09-21 11:49) [14]

>Игорь_   (21.09.04 11:35) [13]
1. N*N можно установить одним вызовом SetLength (см [6] )
2. >array of array of string;
речь сначала шла о числах - со строками работы еще добавится лишней
3. Почитай по ссылке в  [12]


 
Игорь_   (2004-09-21 11:56) [15]

Спасибо всем за советы :-)



Страницы: 1 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.035 c
1-1096272465
Serge
2004-09-27 12:07
2004.10.10
Design-Time controling


8-1090328168
asat
2004-07-20 16:56
2004.10.10
TOpenPictureDialog


1-1096341882
igan
2004-09-28 07:24
2004.10.10
internal error C1376


1-1096009386
NewDelpher
2004-09-24 11:03
2004.10.10
проблемы с AV при вызове Procedure Of Object


10-1028118297
LeS
2002-07-31 16:24
2004.10.10
Помогите начинающему. Регистрация ком.