Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2014, 21:27   #1
Yaroma
Пользователь
 
Регистрация: 25.10.2010
Сообщений: 12
По умолчанию Двумерный динамический массив и указатели

Здравствуте, у меня возникли некоторые вопросы о указтелях и двумерных массивах. Буду признателен, если кто-нибудь на них ответит.

Ниже представлен код из методички, а вот собсна вопросы:
1. Строка 3: В этой строке создается двум.масс.? что значит запись [1..1]? Можно ли здесь создать дв.массив так: TMas = array of array of integer;?
2. Стр.4: Создаем ук-ль на массив. Переменная PMas будет содержать адрес нашего дв.масс.?
3.Абсолютно непонятно что делается в стр 8, присваивание? Зачем???
4. Как заполнить наш дв.масс. из stringGrig используя указатели?
Код:
//Организация двумерного динамического массива реализуется следующим образом:
Type
TMas = array[1..1] of integer;
   PMas = ^TMas;
TMas2 = array[1..1] of  PMas;
   PMas2 = ^TMas2;
  Var
a : PMas2;
 N,M,i,j : integer;
  begin
…
   GetMem(a,4*M);
    for i:=1 to M do GetMem(a[i],N*sizeof(integer));
…
   // Работа с массивом а[i,j], 1≤i≤M, 1≤j≤N
…
    for i:=1 to M do FreeMem(a[i],N*sizeof(integer));
    FreeMem(a,4*M);

Последний раз редактировалось Yaroma; 01.02.2014 в 21:29.
Yaroma вне форума Ответить с цитированием
Старый 01.02.2014, 22:02   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Это похоже на Torbo/Borland Pascal, в Delphi такой код не откомпилируется, а компилятор и сам способен создавать TMas = array of array of integer; хоть TMas = array of array of array of array of array of integer;
Человек_Борща вне форума Ответить с цитированием
Старый 01.02.2014, 22:55   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Torbo/Borland Pascal
Torbo de Borlandi
Los Pascales

Цитата:
В этой строке создается двум.масс.? что значит запись [1..1]?
Так в старом паскале создавались динамические массивы:

Указывался тип: Мол это будет массивом (при этом размерность не важна)
TMas = array[1..1] of integer;
А потом этот тип выдавался за указатель.
PMas = ^TMas;
Ему резервировали память:
GetMem(a,4*M);
И теперь a[i] (или a^[i]) становился полноценным массивом, но размер его варьировался, и размещался он в иной части память нежели обычные массивы.
Цитата:
Переменная PMas будет содержать адрес нашего дв.масс.?
Не переменная а тип: Тип указатель на массив.
Цитата:
Абсолютно непонятно что делается в стр 8, присваивание? Зачем???
Где? Что за строка?
Цитата:
Как заполнить наш дв.масс. из stringGrig используя указатели?
В Делфи твой код бесполезен:
Код:
var a:array of array of string;
...
With StringGrid do begin
 SetLength(a,RowCount,ColCount);
 for i:=Low(a) to High(a) do
  for j:=Low(a[i]) to High(a[i]) do 
   a[i,j]:=Cells[i,j];
...
SetLength(a,0); // Это освободит массив.
I'm learning to live...

Последний раз редактировалось Stilet; 01.02.2014 в 23:03.
Stilet вне форума Ответить с цитированием
Старый 01.02.2014, 23:02   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Torbo de Borlandi
Los Pascales
да да, я практикую пьяное программирование Наслаждайтесь.
Человек_Борща вне форума Ответить с цитированием
Старый 01.02.2014, 23:10   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Человек_Борща
Да да... Знаю. Сакэ-джитцу.
Главное вовремя борщом закушать
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.02.2014, 23:15   #6
Yaroma
Пользователь
 
Регистрация: 25.10.2010
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение

Где? Что за строка?
Вот эта:
Код:
a : PMas2;
Yaroma вне форума Ответить с цитированием
Старый 02.02.2014, 00:11   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Так объявляется переменная с символическим именем a и типом PMas2
northener вне форума Ответить с цитированием
Старый 03.02.2014, 07:31   #8
Yaroma
Пользователь
 
Регистрация: 25.10.2010
Сообщений: 12
По умолчанию

Всем большое спасибо
Yaroma вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерный динамический массив. С. McFrey Помощь студентам 4 14.05.2012 17:15
динамический двумерный массив dart_nick Помощь студентам 0 11.12.2011 13:44
Функции, указатели, двумерный массив MovsesIV Общие вопросы C/C++ 8 18.12.2010 23:19
Двумерный динамический массив Markuss Общие вопросы C/C++ 5 07.12.2010 00:40