Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2008, 16:29   #1
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
По умолчанию absolute

пожалуйста уточните как работает абсолют. Это директива из Паскаля.
Кстати прочёл что она устарела. Как её написать в Дельфи иначе?
Указателями или как...
Don't worry be happy
Izhic вне форума Ответить с цитированием
Старый 23.11.2008, 16:41   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

смотря что требуется... в object pascal она поддерживается... можно разумеется ее инициализировать как к примеру:

Код:
var
  i: Integer;
  bar: array of Byte;
begin
  Pointer(bar) := @i;
  ..

или просто

var
  i: Integer;
  b: array[0..3] of Byte absolute i;
...
BOBAH13 вне форума Ответить с цитированием
Старый 23.11.2008, 16:50   #3
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
По умолчанию

т.е. в данном случае в массиве окажется 4 байта 32битного int'а...
Спасибо BOBAH13, вроде понял. Хороший пример

Нужно 1ым способом...
Пишет
Error: "Invalid TypeCast"
Хотя при absolute у меня сразу работало.
Don't worry be happy

Последний раз редактировалось Stilet; 23.11.2008 в 18:45.
Izhic вне форума Ответить с цитированием
Старый 23.11.2008, 18:47   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Можно так:
Код:
var
  i: Integer;
  bar: array[1..4] of Byte;
begin
  move(i,bar,4);
end;
или так:

Код:
type tbar=array[1..4] of byte;
var
  i: Integer;
  bar: tbar;
begin
  bar:=tbar(i);
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2008, 19:14   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Stilet вы путаите смысл данной операции... Вы копируите данные... а смысл absolute в том что если менять любое значение в одной из переменных то оно меняется и в другой т.к. они обе указывают на один и тот же адресс просто процессор работает с ними по разному.

Теперь поясню разницу array[0..3] of и array of... если объявить статистически [0..3] то дельфи без дерективы absolute резервирует в сегменте данных 4 байта... и адрес объвялянной переменной указывает именно на 1й байт этих данных... если же вы объявляите динамически то резервируется ( что наверняка ) 4 байта - адресс... и так.. когда мы пишем @i это значит что мы указываем адресс на данные i - 4 байта как Integer... и тут процессор понимает что раз объявлено array of byte мы можеш обращаться к данным по адрессу ( т.е. к данным I: Integer) по байтно вот и вся фишка... а absolute всеголиш говори дельфи что эти данные будут указывать на адресс начала данных I: Integer и работать с ними как array[0..3] of Byte

на правильность всего выше сказанного 100% дать не могу т.к. не в курсе как дельфи транслирует в асм

p.s. предъявите код оформим вашу absolute первым способом ))

Последний раз редактировалось BOBAH13; 23.11.2008 в 19:27.
BOBAH13 вне форума Ответить с цитированием
Старый 24.11.2008, 00:45   #6
Роман Радер
Форумчанин
 
Аватар для Роман Радер
 
Регистрация: 16.12.2006
Сообщений: 859
По умолчанию

хм... я видел что такое есть, но ни разу не понадобилось.. можно привести практический пример где оно надо? ну не приходит на ум ничего...
Роман Радер вне форума Ответить с цитированием
Старый 24.11.2008, 02:08   #7
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Можно так еще
Код:
type TMyInt = record
case integer of
    0: (i: integer);
    1: (a: byte; b: byte; c: byte; d: byte);
end;
Цитата:
Сообщение от Роман Радер Посмотреть сообщение
хм... я видел что такое есть, но ни разу не понадобилось.. можно привести практический пример где оно надо? ну не приходит на ум ничего...
Я, например, пользуюсь подобным для перебора диапазона айпишников. Так гораздо удобнее, чем постоянно вызывать StrToInt
Баламут вне форума Ответить с цитированием
Старый 18.12.2009, 19:33   #8
Beweniy_pchel
Новичок
Джуниор
 
Регистрация: 17.12.2009
Сообщений: 2
По умолчанию Реанимация темы

Цитата:
Сообщение от Баламут Посмотреть сообщение
Можно так еще
Код:
type TMyInt = record
case integer of
    0: (i: integer);
    1: (a: byte; b: byte; c: byte; d: byte);
end;


Я, например, пользуюсь подобным для перебора диапазона айпишников. Так гораздо удобнее, чем постоянно вызывать StrToInt
Покажите, пожалуйста, в коде, если не трудно.

Последний раз редактировалось mihali4; 18.12.2009 в 19:41.
Beweniy_pchel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
связать таблицы в Absolute Database furstenberg БД в Delphi 5 08.03.2011 10:51
Помогите с Absolute Database sveiks БД в Delphi 1 30.07.2007 17:03