Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.055 c
15-1186402849
oldman
2007-08-06 16:20
2007.09.02
Всех причастных с Днем Железнодорожника!!!


2-1186638077
Darvin
2007-08-09 09:41
2007.09.02
выделение в TListView


2-1186662007
Gamer
2007-08-09 16:20
2007.09.02
работа с Firebird из Delphi 2006


10-1135328510
alex_s
2005-12-23 12:01
2007.09.02
OPC клиент


6-1168839344
DimaL
2007-01-15 08:35
2007.09.02
Перехват передачи данных





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский