Форум: "Начинающим";
Текущий архив: 2014.11.16;
Скачать: [xml.tar.bz2];
ВнизРабота с указателями не получается Найти похожие ветки
← →
Вова (2013-11-09 10:50) [0]
vaR
StartSource, StopSource: pByte;
Delta: integer;
b: Tbitmap;
Start,ps: pInteger;
M: TMass;
BEGIN
Start := b.ScanLine[b.Height - 1];
StartSource := @M.Mass[x + y * M.Xsize]; //M.mass - array of byte;
..........
Почему вот это работаетif (StartSource + (p^) + Delta)^ = 255 then
а это нет:(Start + (p^) + Delta) = $89FF1310;
← →
вова (2013-11-09 10:54) [1]ой
(Start + (p^) + Delta)^ = $89FF1310;
вообщем суть ошибки в том что он отказывается прибавлять дельту во втором случае
← →
RWolf © (2013-11-09 13:48) [2]$89FF1310 > MaxInt.
← →
вова (2013-11-09 16:01) [3]Start^ = $89FF1310;
но так все замечательно присваивается
и если сделать ps := (Start + (p^) + Delta) ; ошибка будет таже
← →
ProgRAMmer Dimonych © (2013-11-09 17:44) [4]Раз текста ошибки нет, спросим о том, как объявлена
p
. Чтобы исключить.
← →
вова (2013-11-09 20:06) [5]
var
StartTemplate, StopTemplate, p: pWord;if (StartSource + (p^) + Delta)^ = 255 then
if (Start + (p^) + Delta)^ =255 then
[DCC Error] xxx.pas(2078): E2015 Operator not applicable to this operand type
в этих 2х строках разные только первые операнды, но первая всегда работает, а вторая нет.
← →
sniknik © (2013-11-10 11:45) [6]> Почему вот это работает
if (StartSource + (p^) + Delta)^ = 255 then
интересный вопрос... ответ - наверное потому что ты врешь. не будет это работать, с той же ошибкой какую приводишь для второго варианта.
← →
bems © (2013-11-10 17:03) [7]потому что PByte объявлен с {$POINTERMATH ON} а PInteger без него
чтобы заработало можно сделать {$POINTERMATH ON} перед всеми этими операциями
← →
icWasya © (2013-11-11 14:14) [8]С указателями, кроме {$POINTERMATH ON}, нужно учитывать, что если к указателю на байт прибавить единичку, то адрес изменится на один, а вот если к указателю на Integer прибавить единичку, то адрес изменится на четыре.
← →
Вова (2013-11-11 14:35) [9]на 4 байта....или на 1 Integer.....на одну ячейку в общем.
← →
Ega23 © (2013-11-11 14:45) [10]
> на 4 байта....или на 1 Integer.....на одну ячейку в общем.
На SizeOf(T)
← →
DevilDevil © (2013-11-19 10:04) [11]> Вова (09.11.13 10:50)
Я думаю проблема в том, что ты не понимаешь, как располагаются данные в битмапе. Строки битмапа идут снизу вверх, а не вверху вниз. Каждая строка выровнена на 4 байта.
Поэтому Start действительно указывает на начало битмапа. И для доступа к пикселю [X, Y] нужно Y переворачивать. Полагаю (p^) + Delta у тебя даёт отрицательное число
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2014.11.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.001 c