[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ: Вы несете откровенную чушь !!!!!
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено trainer 10 апреля 2002 г. 18:02
В ответ на: (+) отправлено nKam 10 апреля 2002 г. 15:25

Итак, отвечаю по пунктам Вашего сообщения:
1) Union позволяет получить доступ к одному и тому же объекту( в конечном итоге памяти ), как к объектам разного типа, например к long( 32 или 64 бита ) как к массиву байт или 16-битных слов;

typedef union {
unsigned long AsLong;
unsigned char AsBytes[sizeof(long)];
} LongUnion;
LongUnion myLong;
myLong.AsLong; /* это как длинное целое */
myLong.AsBytes[0] /* а это байт длинного целого, хранимый по младшему адресу */

----------------------------------------------------------------
2) Правила размещения элементов структур и объединений железно прописаны в документации, надо просто не лениться ее читать, для учета их реализации есть условная компиляция.Компилятор - это лишь инструмент и ничего более;
typedef union {
unsigned short AsWord;
struct {
#ifdef _X86_
unsigned char LowByte;
unsigned char HighByte;
#else
unsigned char HighByte;
unsigned char LowByte;
#endif
};
unsigned char AsBytes[sizeof(short)];
} __word;

----------------------------------------------------------------
ЗЫ) Назначение любого типа - типизировать работу с объектами, выделением памяти под неизвестно что ведает void * ( точнее указанием на нее ), это как раз указатель неизвестно на что ( тоже тип ).
long SimplyLong;
LongUnion * myLongPtr;
#define SimplyLongAsUnion ((LongUnion)SimplyLong)
myLongPtr=(LongUnion *)(&SimplyLong);
for( int i=0 ; i != sizeof(long) ; i++ ) SendByte(myLongPtr->AsBytes[i]);
for( int i=0 ; i != sizeof(long) ; i++ ) SendByte(SimplyLongAsUnion.AsBytes[i]);

----------------------------------------------------------------
Надеюсь, что объяснил достаточно популярно.
Дальнейшая дискуссия в свете написанного Вами выше мне представляется бессмысленной.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru