Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Объединения


Chlavik ©   (2002-12-22 18:24:00) 

Как на паскале обьявляются объединения переменных в одну область памяти, на С++ это Union а вот на паскале я не знаю как это делается.....Т.е. например две переменных испльзуют одну и ту же область памяти..


Оливейра   (2002-12-22 22:53:00) [1]

3) Просто тупое в стиле Си (опасное) приведение типов и жонглирование указателями ( вопреки воле компилятора - сколько усилий надо приложить... :-)

type
PByte = ^Byte;

var m_iValue: integer;
m_pByte : PByte;
begin
m_iValue := $FFFEFDFC;
m_pByte:= PByte(@m_iValue);
writeln(
m_pByte^, " ", // у меня байты в обратном порядке выводятся, AMD.
PByte(longint(m_pByte) + sizeof(Byte)) ^, " ",
PByte(longint(m_pByte) + sizeof(Byte) * 2)^, " ",
PByte(longint(m_pByte) + sizeof(Byte) * 3)^
);
readln;

end.


PVOzerski   (2002-12-22 18:52:00) [2]

2 варианта, как минимум:
1) использование директивы absolute
var
x:longint;
y:pointer absolute x;

2) использование записей с варьирующими полями:
var
r:packed record
constantpart1:type1;
....
constantpartN:typeN;
case integer of //в данном случае этот integer фиктивен
0:(x:longint);
1:(y:pointer);
end;

на самом деле каждый вариант может включать и несколько полей,
переключатель integer может быть и не integer, и не фиктивным... Лучше почитайте литературу или хотя бы help.


Наверх

Титульная страница Поиск, карта сайта Написать письмо