Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
Игорь_   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.034 c
14-1095519779
Ийсус
2004-09-18 19:02
2004.10.10
Doom3


14-1095594379
_iceman_home
2004-09-19 15:46
2004.10.10
Проблемы с монитором


3-1095166277
Koala
2004-09-14 16:51
2004.10.10
Вопрос по SQL запросу


3-1094803115
/glokk
2004-09-10 11:58
2004.10.10
найти повторяющиеся номера


10-1047475374
Grrey
2003-03-12 16:22
2004.10.10
Глюки при создании ActveX компонентов.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский