Вопрос № 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