![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
массивы данных [D6, Win95/98]
Игорь_ © (2004-09-21 09:38:00)Есть массив MyArray = array of array of integer;
подскажите, пожалуйста, как его записать в память с помощью указателя?
Игорь_ (2004-09-21 11:56:00) [1]Спасибо всем за советы :-)
MBo (2004-09-21 11:49:00) [2]>Игорь_ (21.09.04 11:35) [13]
1. N*N можно установить одним вызовом SetLength (см [6] )
2. >array of array of string;
речь сначала шла о числах - со строками работы еще добавится лишней
3. Почитай по ссылке в [12]
Игорь_ (2004-09-21 11:35:00) [3]До того как сформировать массив размерности 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:16:00) [4]http://www.delphikingdom.ru/lyceum/seminar.asp?partID=4
Amoeba (2004-09-21 11:13:00) [5]
> Erik1 © (21.09.04 11:04) [5]
Не сбивай молодого человека с панталыку!
Игорь_ (2004-09-21 11:12:00) [6]Вообще-то я учусь на заочных курсах и у меня есть лабораторка в которой написано:
Шаг 9. Создайте обработчик событий для кнопки «Ввод дан-ных». Последовательность действий должна быть такой:
· записать в память сгенерированный двумерный массив вве-денной размерности N;
Вот я и мучаюсь.
КаПиБаРа (2004-09-21 11:12:00) [7]Игорь_ (21.09.04 10:44) [2]
можно тоже самое проделать с массивом и, если можно, то как?
С динамическим массивом лучше так не делать, т.к. при увеличении размера он "переедет" по другому адресу и все указатели полученные таким образом будут не действительны.
IntegerPtr := @MyArray[3,5] - указатель на 5 элемент массива в 3 строке.
=================================
Когда у тебя есть только молоток,
все похоже на гвоздь.
=================================
Amoeba (2004-09-21 11:10:00) [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;
MBo (2004-09-21 11:09:00) [9]>Erik1 © (21.09.04 11:04) [5]
>PMyArray = ^TMyArray;
обычно такой подход не нужен
MBo (2004-09-21 11:07:00) [10]>загадочную фразу, что одной командой это сделать нельзя
Это правда - двумерный динамический массив представляет собой отдельные блоки памяти, так что придется каждый массив низшего уровня сохранять отдельно.
type
TA:array of array of Integer;
var a:ta;
begin
SetLength(a,3,3);
теперь a является (неявным) указателем на массив из 3-х указателей на массивы данных, т.е.
a[0] - указывает на первый блок из 3-х чисел и т.д.
Erik1 (2004-09-21 11:04:00) [11]А что тебя смущает, конечно можно, но ненужно. Потому, что если у тебя есть указатель на масив, то емеет смвсл выделеть ему память, а после незабыть освободить ее. Пример:
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);
Хотя непонятно зачем тебе динамически создовать масив. Так с ним неработают.
Игорь_ (2004-09-21 10:57:00) [12]Ну наверное заглядывал.
С.Бобровский Delphi7 нашел там про это только загадочную фразу, что одной командой это сделать нельзя.
Никита Культин Delphi6 -Вообще ничего не нашел относительно этого.
В Help тоже найти не могу ИБО изучаю Delphi6 только второй месяц.
Amoeba (2004-09-21 10:47:00) [13]А в Help или в книжку заглянуть религия не позволяет? Там даже примеры есть.
Игорь_ (2004-09-21 10:44:00) [14]Имелось в виду несколько другое:
var BytePtr:^ byte;
чтобы присвоить ей адрес конкретного места памяти используется операция @.
var BytePtr:^ byte;
ByteVal: byte;
begin
ByteVal := 255;
BytePtr :=@ByteVal
можно тоже самое проделать с массивом и, если можно, то как?
ЮЮ (2004-09-21 09:46:00) [15]type
TMyArray= array of array of integer;
var
arr: TMyArray;
arr - это и есть указатель и находится, как не странно, в "памяти" :-)