[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) Правила размещения элементов структур и объединений железно прописаны в документации, надо просто не лениться ее читать, для учета их реализации есть условная компиляция.Компилятор - это лишь инструмент и ничего более;
---------------------------------------------------------------- ЗЫ) Назначение любого типа - типизировать работу с объектами, выделением памяти под неизвестно что ведает 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]);
---------------------------------------------------------------- Надеюсь, что объяснил достаточно популярно. Дальнейшая дискуссия в свете написанного Вами выше мне представляется бессмысленной.