|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
07.06.2010, 14:49 | #1 |
Форумчанин
Регистрация: 03.01.2010
Сообщений: 229
|
объеденение типов union
Пишу одну вещь, дошел до этапа где присваивал пременным в структуре, объеденные в union, дефолтные значения. И глаза на лоб повылазили, когда после присвоения значения следующей переменной в структуре, все типы в union начинали менять значения Оо. Убрал union и все стало нормально. Проблема в том, что в заголовочном файле структур на 10 кб, а так же готовая реализция их записи в файл. Из-за этих union мне прийдеться перелапатить кучу кода.
Скажите мне кто-то, что происходит с переменными, объединеными в union? =\ Код:
подпись
Последний раз редактировалось liljon; 07.06.2010 в 14:55. |
07.06.2010, 15:11 | #2 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Цитата:
В данном случае получается, что в одной области памяти записаны следующие данные: center.x, radius, speed, direction.x, startPosition, radiusEllipsoid. В следующих 4-х байтах хранятся center.y и direction.y, ну и дальше соответственно center.z и direction.z. Таким образом, меняем радиус и автоматически получаем неверные координаты центра, скорости и т.д. |
|
07.06.2010, 15:43 | #3 |
Форумчанин
Регистрация: 03.01.2010
Сообщений: 229
|
как вы определили что именно в таком порядке они распологаються в памяти? у меня в IrrAnimation еще штуки 4 юниона. Недобная эта штука...
подпись
|
07.06.2010, 16:32 | #4 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Цитата:
Код:
В случае же с union, все его поля располагаются со смещением 0, т.е. в одной области. При этом размер всего union'a равняется размеру самого объемного его члена. Запись такого вида: Код:
Код:
Очень даже удобная. Просто её нужно грамотно использовать. наиболее удачное её применение: создание "псевдонимов" для более удобной обработки данных. Возьмем такую штуку, как координата в 3D пространстве. В одном случае удобно использовать имена осей (x, y, z), а в другом - обращение по индексу (0, 1 ,2). При помощи union'a это легко решается: Код:
Код:
|
|
07.06.2010, 16:38 | #5 |
Форумчанин
Регистрация: 03.01.2010
Сообщений: 229
|
за выравнивание мы знаем, а за юнионы вот узнали теперь... спасибо вам огромное
подпись
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
объеденение книг | king13 | Microsoft Office Excel | 7 | 16.10.2009 14:57 |
Объеденение несколький текстовых переменных в одну(Basik) | П@вел | Помощь студентам | 0 | 21.07.2009 14:36 |
объеденение даты | Alexi | Компоненты Delphi | 3 | 27.04.2009 15:32 |
Объеденение 2-х таблиц | Stanislav | БД в Delphi | 3 | 28.07.2008 09:44 |
Union | NeiL | Общие вопросы C/C++ | 1 | 30.05.2008 23:45 |