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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2010, 01:09   #11
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию

Цитата:
а почему не передать его как открытый массив?
А как это?
Miha85193 вне форума Ответить с цитированием
Старый 19.07.2010, 01:27   #12
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

есть динамический массив:
mas: array of byte;

есть процедура:
procedure A(m: array of byte); {здесь m - открытый массив}
var
i, j: smallint;
begin
i:=High(m); {индекс последнего элемента массива m}
j:=Length(m); {длина массива m}
end;

индексация открытых массивов идет с 0 также как и в динамических. Для того чтобы передать этой процедуре динамический массив его в начале естественно надо создать (SetLength(mas,10) ). Ну а дальше пишем вызов процедуры и передаем ей массив mas: A(mas);
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 19.07.2010, 01:45   #13
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию

А массив обязательно должен быть array of тип, или можно объявить и передать в качестве параметра, массив фиксированной длины?
Miha85193 вне форума Ответить с цитированием
Старый 19.07.2010, 02:06   #14
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Цитата:
Сообщение от Miha85193 Посмотреть сообщение
А массив обязательно должен быть array of тип, или можно объявить и передать в качестве параметра, массив фиксированной длины?
если известна длина массива, то его можно передать например так:
procedure A(m: array [0..10] of byte);
соответственно массив который будет передаваться как фактический параметр должен быть описан также:
var
mas: array [0..10] of byte;
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 19.07.2010, 02:21   #15
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию

Задать массив, как параметр процедуры/функции, это я умею. Меня интересует: то как можно передать процедуре массив любой длины, и чтобы она сумела получить доступ к любому элементу этого массива.
Miha85193 вне форума Ответить с цитированием
Старый 19.07.2010, 02:40   #16
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Цитата:
Сообщение от Miha85193 Посмотреть сообщение
Задать массив, как параметр процедуры/функции, это я умею. Меня интересует: то как можно передать процедуре массив любой длины, и чтобы она сумела получить доступ к любому элементу этого массива.
ну я же тебе написал. Используй динамический массив. В списке формальных параметров пропиши его как открытый массив и потом делай с ним что хочешь. Индексация открытых массивов идет с 0. При помощи функции High ты получишь индекс последнего элемента массива. Например если создашь динамический массив из 10 элементов (SetLength(mas,10)) и передашь его в процедуры как я тебе писал, то в этой процедуре ты можешь написать например цикл обнуления всех элементов массива:
for i:=0 to High(m) do
m[i]:=0;
или обратиться к любому из них. Главное что ты знаешь границы массива (от 0 до High(m))!!!

функция Length возвращает количество элементов массива. В данном примере она вернет 10.
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 19.07.2010, 02:57   #17
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию

И что такой процедуре будет "все равно" какой массив ей передан в качестве параметра, динамический или фиксированной длины? Лично я в этом сомневаюсь.

Последний раз редактировалось Miha85193; 19.07.2010 в 03:11.
Miha85193 вне форума Ответить с цитированием
Старый 19.07.2010, 03:10   #18
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Цитата:
Сообщение от Miha85193 Посмотреть сообщение
И что такой процедуре будет "все равно" какой массив ей передан, динамический или фиксированной длины? Лично я в этом сомневаюсь.
а ты проверь
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 19.07.2010, 17:11   #19
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию

Да действительно, проверил все работает. Вот только жаль нельзя использовать в качестве параметра указатель на массив. Еще есть одна проблема: компилируется эта процедура как-то странно. Вот рисунок:

На рисунке можно увидеть, что High(Array_) вроде как не компилируется. Но в действительности при трассировке, видно что все-таки проходит компиляцию так, как Higher в цикле как не странно равен последнему индексу массива. Возможно у тебя тоже была такая же ситуация с применением High. Лично я не понимаю, в чем тут дело
Изображения
Тип файла: png initarray.png (3.0 Кб, 66 просмотров)

Последний раз редактировалось Miha85193; 19.07.2010 в 17:30.
Miha85193 вне форума Ответить с цитированием
Старый 19.07.2010, 18:14   #20
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Цитата:
Сообщение от Miha85193 Посмотреть сообщение
Возможно у тебя тоже была такая же ситуация с применением High. Лично я не понимаю, в чем тут дело
я тоже не понимаю Но работает верно
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обращение к элементам двумерного массива через указатели в С++ серг Помощь студентам 17 06.12.2009 18:00
обращение к элементам двумерного массива через указатели серг Общие вопросы C/C++ 2 05.12.2009 23:33
Обращение к элементам массива через указатель в С++ серг Помощь студентам 1 24.11.2009 01:30
обращение к элементам двумерного массива через указатели в С ++ серг Помощь студентам 0 23.11.2009 22:43