Показать сообщение отдельно
Старый 12.02.2009, 08:38   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,920 пользователей)
К вопросу об указателях

Хотелось бы пролить свет на следующий вопрос. Я напишу - а вы скажите, что не правильно. Я весьма грубо работал с терминологией, т.к. меня интересовали лишь общие детали реализации (поридираться я и сам могу)

В Blitz-е все экземпляры типов создаются всегда только с максимальной областью видимости - иными словами, глобально для всей программы.
Таким образом каждая конструкция типа
MyElem.MyType
описывает указатель на элемент типа MyType.
В свою очередь, MyElem может принять либо адрес существующего экземпляра типа:
Local XElem.MyType=New MyType
MyElem=XElem
или вновь созданного оператором New
MyElem=New MyType
К указателю может быть применена операция (int), т.е. тайп-каст к целому числу (хотя на самом деле, ничего общего нет - это все-голишь способ имперсонализации\сериализации указателя, а не приведения типа данных) путём применения к нему недокументированной команды Handle:
x=Handle(MyElem)
Обратная операция осуществялется констуркцией с использованием недокументированной команды Object:
MyElem=Object.MyType(x)
Все экземпляры типа автоматически добавляются в единый (для данного типа) двунаправленный список элементов.

Значение в MyElem (х3 как его получить - но тем не менее это же число) насколько я понимаю - есть физический адрес в ОЗУ, в то время как Handle (дескриптор) является некоей биекцией ставящей каждому казтелю данного типа в соотвествие некторое, слабопрогнозируемео значение.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием