Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.02;
Скачать: CL | DM;

Вниз

Непонятная строчка кода   Найти похожие ветки 

 
исследователь ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.03 c
10-1135328510
alex_s
2005-12-23 12:01
2007.09.02
OPC клиент


15-1186502485
Ivolg
2007-08-07 20:01
2007.09.02
Превести c C в Delphi


2-1186843938
Aleksandrrr
2007-08-11 18:52
2007.09.02
Как добавить в *.exe -файл-проект изображения и текстовые файлы?


8-1164745849
Oburec
2006-11-28 23:30
2007.09.02
Как отобразить графику рисуемую c OpenGL на простой форме)


15-1186171905
Kostafey
2007-08-04 00:11
2007.09.02
С днем рождения ! 4 августа