Главная страница
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.055 c
14-1095666994
lipskiy
2004-09-20 11:56
2004.10.10
Какой файрвол лучше ZoneAlarm или Outpost?


8-1090410569
kingdom
2004-07-21 15:49
2004.10.10
Может ли DirectDraw нарисовать линию?


4-1093780326
Endi
2004-08-29 15:52
2004.10.10
Task Scheduler


14-1095187743
Fusly
2004-09-14 22:49
2004.10.10
SP2 for WinXP


6-1090316461
highlander
2004-07-20 13:41
2004.10.10
Отправка СМС-сообщений, используя HTTP