Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1397050081
ТНЕ картман
2014-04-09 17:28
2014.11.16
ряды


15-1396946245
ТНЕ картман
2014-04-08 12:37
2014.11.16
забыл название программки


15-1397067341
Rouse_
2014-04-09 22:15
2014.11.16
Анализ приложения защищенного виртуальной машиной


15-1396171437
KSergey
2014-03-30 13:23
2014.11.16
С# и проверка абстрактных методов


2-1383979843
Вова
2013-11-09 10:50
2014.11.16
Работа с указателями не получается





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский