Главная страница
    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.47 MB
Время: 0.002 c
15-1396963676
Одуванчик
2014-04-08 17:27
2014.11.16
Синий экран Windows7


11-1255299161
Валера
2009-10-12 02:12
2014.11.16
Splash Screen. Как сделать ?


2-1384408357
goody
2013-11-14 09:52
2014.11.16
Чтение последних записанных строк из файла


15-1397053687
Ламо777
2014-04-09 18:28
2014.11.16
Кто знает форумы по работе с клеточными автоматами?


15-1396946245
ТНЕ картман
2014-04-08 12:37
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский