Форум: "Прочее";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];
ВнизНепонятная строчка кода Найти похожие ветки
← →
исследователь © (2007-08-03 12:40) [0]Уважаемые Мастера!
Читал сейчас код один старенький для чтения GIF-файла и стопанулся вот на чем:Getbyte:=GIFStuff^[GIFPtr];
Это что за операция такая - ^[] ?
Заранее спасибо
← →
clickmaker © (2007-08-03 12:41) [1]разыменование указателя
← →
исследователь © (2007-08-03 12:43) [2]Поясните, пожалуйста, что происходит здесь, по пунктам - и каков результат действия.
← →
исследователь © (2007-08-03 12:44) [3]я просто привык, что разыменовывание указателя - это просто P^
а эти квадратные скобки... шо цэ?
← →
clickmaker © (2007-08-03 12:45) [4]
> а эти квадратные скобки... шо цэ?
эээ... элемент массива?
← →
wp2 © (2007-08-03 12:45) [5]А паскаль сложно почитать?
← →
Dib@zol © (2007-08-03 12:45) [6]GifStuff - это не массив, а УКАЗАТЕЛЬ на массив. Разыменование - это операция позволяющая считать такие GifStuff-ы обычными массивами (или указатель на переменную - обычной переменной). PInteger^=Integer.
← →
wp2 © (2007-08-03 12:48) [7]type S = array[1..20] of Integer;
var W: ^S;
begin
W^[1] := 20;
WriteLn(W^[1]);
ReadLn
end.
← →
исследователь © (2007-08-03 12:49) [8]Спасибо, теперь понял.
Только вот к чему автор делал все через указатели, если опять же затем пытается работать с ними, как с обычными массивами?
← →
исследователь © (2007-08-03 12:50) [9]
> type S = array[1..20] of Integer;var W: ^S;begin W^[1]
> := 20; WriteLn(W^[1]); ReadLnend.
спасибо, все наглядно и ясно
← →
Dib@zol © (2007-08-03 12:50) [10]> Только вот к чему автор делал все через указатели, если
> опять же затем пытается работать с ними, как с обычными
> массивами?
Кхм. ГИФы могут быть, ээ, различного размера...
← →
wp2 © (2007-08-03 12:50) [11]> PInteger^=Integer.
Гы
PInteger = ^Integer;
← →
исследователь © (2007-08-03 12:51) [12]могут, не спорю. И что? Скорость вычислений?
← →
исследователь © (2007-08-03 12:51) [13]
> PInteger = ^Integer;
Спасибо, а то я испугался, что совсем дурак и уже начал вводить себе НОВУЮ философию кода :)
← →
Dib@zol © (2007-08-03 12:53) [14]> Скорость вычислений?
Именно. В частности, скорость парсинга параметров функции. Попробуй передать какой нибудь подпрограмме массив весом килобайт в тридцать...
← →
Yanis © (2007-08-03 12:55) [15]
> а то я испугался, что совсем дурак
Честно говоря вопросы типа
> Это что за операция такая - ^[] ?
тоже на хорошие мысли не наталкивают.
← →
@!!ex © (2007-08-03 12:56) [16]Автор, почитай про указатели, ты не втыкаешь зачем они нужны.
Вопрос к тебе, зачем нужен указатель, если потом не работать с ним как с данными??
← →
wp2 © (2007-08-03 12:56) [17]>Только вот к чему автор делал все через указатели, если
> опять же затем пытается работать с ними, как с обычными
> массивами?
Ну, это больше философский вопрос. Зачем использовать указатели, если можно использовать обычные переменные.
Вон, в Java вообще нет указателей. Живы ведь.
ЗЫ. Не забывай, что обычные переменные это тоже указатели ;-)
← →
Yanis © (2007-08-03 12:58) [18]Куда ни глянь одни указатели.
Даёшь больше данных! Прогоним указатели.
← →
Bless © (2007-08-03 12:58) [19]
> Dib@zol © (03.08.07 12:53) [14]
>
> > Скорость вычислений?
>
> Именно. В частности, скорость парсинга параметров функции.
> Попробуй передать какой нибудь подпрограмме массив весом
> килобайт в тридцать...
в результате попытки будет передан только указатель на этот массив :)
← →
исследователь © (2007-08-03 12:58) [20]Понял. Извините, что так беспокою, но вот еще одна неясность:
Код этот я нашел на http://www.forums.avtograd.ru/viewtopic.php?t=6516696&sid=1d9cc31b74df5372c22c9284f60f4839 , где-то посредине страницы. Зачем эта операция с масками:
Code:=(RawCode shr (BitOffset mod ) and ReadMask;
← →
Dib@zol © (2007-08-03 12:59) [21]Удалено модератором
Примечание: Жаргон смени
← →
исследователь © (2007-08-03 13:00) [22]
> Yanis © (03.08.07 12:55) [15]
зачем сразу оскорблять? Ты не был новичком? Я всего лишь попросил помочь, думаю, не стоит так сразу.
> @!!ex © (03.08.07 12:56) [16]
Уже начал "ффыкать"
← →
исследователь © (2007-08-03 13:03) [23]Причем явно строчка некорректна
← →
исследователь © (2007-08-03 13:04) [24]Видимо, из-за смайла в очках 8)
там было
Code:=(RawCode shr (BitOffset mod 8) and ReadMask;
← →
Yanis © (2007-08-03 13:06) [25]
> зачем сразу оскорблять?
А я и не пытался :) Потому как
> был новичком
← →
исследователь © (2007-08-03 13:08) [26]
> А я и не пытался :) Потому как
ты лучше вот помоги, строчку объясни
← →
wp2 © (2007-08-03 13:08) [27]ясно, что не корректна, количество открытых скобок не соотвествует количеству закрытых :-)
Да еще и после мода нет операнда.
← →
@!!ex © (2007-08-03 13:08) [28]> [17] wp2 © (03.08.07 12:56)
Обычные переменные - не указатели. вернее фиксированные указатели. Им нельзя выделять память, их нельзя изменять.
> в результате попытки будет передан только указатель на этот
> массив :)
Не. Нифига. Копия массива будет передана(если разговор не о динамическом массиве, который сам по себе является указателем)
← →
wp2 © (2007-08-03 13:10) [29]Обычные переменные - не указатели. вернее фиксированные указатели. Им нельзя выделять память, их нельзя изменять.
Ну, это понятно.
А вон в С/С++ можно вообще, через указатели константу поменять!!!
← →
исследователь © (2007-08-03 13:14) [30]Я уже подправил строчку, объясните, пожалуйста.
← →
Dib@zol © (2007-08-03 13:20) [31]shr - бинарный сдвиг влево, быстрый аналог div 2. shr 8 означает сдвиг на восемь разрядов.
mod - нахождение остатка от деления. 3 mod 2 = 1. 10 mod 5 = 0.
and - побитное сличение разрядов чисел. то есть в числе (в его двоичном представлении) остаются единицами тока те разряды, которые и во 2-м числе единицы.
← →
исследователь © (2007-08-03 13:21) [32]Поверьте, я знаю назначение всех операция, даже shr-ом могу похвастаться :) Меня интересует, зачем это было сделано и что получилось.
← →
wp2 © (2007-08-03 13:22) [33]>Code:=(RawCode shr (BitOffset mod 8) and ReadMask;
количество открытых скобок не соотвествует количеству закрытых
Ты, если решил программировать, то хоть бы книжку какую почитал...
← →
clickmaker © (2007-08-03 13:24) [34]
> Меня интересует, зачем это было сделано и что получилось
надеешься, что здесь объявится автор кода?
← →
Dib@zol © (2007-08-03 13:25) [35]В итоге RawCode сдвигается на 1-7 разрядов, сиречь делится на 2-28, а потом из него выделяется определённая цепочка бит и пишется в Code.
← →
исследователь © (2007-08-03 13:26) [36]
> wp2 © (03.08.07 13:22) [33]
та б... хорошо,Code:=(RawCode shr (BitOffset mod 8) ) and ReadMask;
думаю очевидно, что больше ставить ее некуда, разве что в конец :), но это тупо. Я не такой ламак, просто не заметил
← →
исследователь © (2007-08-03 13:28) [37]
> надеешься, что здесь объявится автор кода?
надеюсь, что найдутся нормальные люди с человеческим обращением, а не презрением к окружающим
> определённая цепочка бит и пишется в Code.
это тоже я понял, вопрос в том - нафига? (с)
← →
Dib@zol © (2007-08-03 13:30) [38]> это тоже я понял, вопрос в том - нафига? (с)
Уууу... Эт сложный вопрос. Вот если б я знал, откуда ты этот код сковырнул, тогда да. А так... Звиняй.
← →
Zeqfreed © (2007-08-03 13:31) [39]При чем здесь скорость вычислений? Просто обращаться к данным по индексу гораздо удобней, чем вручную сдвигать указатель.
← →
ProgRAMmer Dimonych © (2007-08-03 13:32) [40]> исследователь © (03.08.07 13:28) [37]
> это тоже я понял, вопрос в том - нафига? (с)
Видимо, эта операция позволяет восстановить исходную последовательность байтов, описывающих изображение, из сжатой. Т.е. где-то рядом в статье должно быть объяснение - зачем. Если нет - можно поверить, можно - найти описание формата. Там что-нибудь обязательно будет.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.043 c