Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 193
от 16.07.2006, 14:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 198, Экспертов: 53
В номере:Вопросов: 1, Ответов: 2


Вопрос № 48748: Здравствуйте, эсперты! Делаю следуюющее: -------------- type arrP = ^arrType; arrType = array [0..0] of byte; var img:arrP; begin GetMem(img,50); ... end. -------------- Использую для хранения ...

Вопрос № 48.748
Здравствуйте, эсперты!
Делаю следуюющее:
--------------
type
arrP = ^arrType;
arrType = array [0..0] of byte;
var
img:arrP;
begin
GetMem(img,50);
...
end.
--------------
Использую для хранения картинки. Только вот записать данные в img выходит, а вот обращаться к конкретному элементу не получается. Знаю (уже) что array [0..0] запись не подходит в данном случае. Вопрос, как мне обявлять тип, чтобы я мог обратиться к определённому элементу массива? Типа img^[6]:=5; writeln(img^[6]);
?
Отправлен: 10.07.2006, 20:08
Вопрос задал: 3BEPEK (статус: 3-ий класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, 3BEPEK!
Не надо делать переменную типа указатель на массив - достаточно сделать ее просто типа указатель на переменную и обращаться по индексу. Или арифметика: (img + i)^
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Студент)
Ответ отправлен: 10.07.2006, 23:31
Оценка за ответ: 5

Отвечает: Ayl
Здравствуйте, 3BEPEK!

К сожалению, компилятор проверяет непосредственный индекс массива на попадание в заданные при объявлении границы массива автоматически и это не отключается.
Поэтому нужно немного поизвращаться.
Вариантов несколько.
1. Отключаете директиву формирования кода для проверки попадания в диапазон границ: {$R-}. Обращения к элементам массива производите через переменную: i := 6; img^[i] := 5;

2. Для указателя используете нетипизированный указатель: p : Pointer;
Вводите тип для указателя на массив: arrP = ^array [0..65519] of Byte;
Обращения к массиву выполняете через прямое преобразование типов: arrP (p)^ [6] := 5;

3. Заводите тип для массива и указатель на него: arrP = ^arrType; arrType = array [0..65519] of Byte;
Заводите переменную: p : arrP;
Выделяете память как угодно: GetMem (p, 50);
Обращаетесь: p^ [6] := 5;
---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Академик)
Россия, Санкт-Петербург
ICQ: 5163321
----
Ответ отправлен: 11.07.2006, 13:49
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное