![]() |
¿ union ?
Hola foreros, en mi ardua tarea de seguir traduciendo unos headers me he encontrado con la siguiente declaración de un registro:
Código PHP:
|
Bueno, eso de union es como decir que el mismo sitio vas a guardar todo nada mas que cada uno ocupará lo que tenga que ocupar:
con struct: |*****************| <--- Espacio total |Var1, V a r i a b l e 2| <--- Organizacion interna con union: |*************| <----- supongamos que es el espacio que tienes |Var1 | <----- este es el que ocupa la vriable 1 |V a r i a b le 2 | <------ pero resulta que en el mismo espacio inicia la variable 2 y ocupa más espacio Esto se usa por lo general cuando no sabes que tamaño vas a usar y no quieres desperdiciar memoria, o cuando deseas hacer las cosas más eficientes, o para lo que sea que desees hacer y se te ocurra que se adapte a este concepto para mayor referencia: http://209.85.207.104/search?q=cache:Qep_AkP2nBEJ:www.conclase.net/c/curso/index.php%3Fcap%3D016+palabra+reservada+union+c%2B%2B&hl=es&ct=clnk&cd=2&gl=mx saludos |
union es un tipo de datos de C muy similar a struct. La definición "canónica" union es:
Cita:
Todos los elementos de una union ocupan el mismo espacio físico en memoria, de manera que el espacio total que ocupa la union es el del elemento de mayor tamaño: Código:
union mytypes_t { Código:
mytypes.c Por eso se llama union, si cambias un campo cambias el otro en automático |
union
Gracias a los dos por vuestras explicaciones. Sin duda es la definición perfecta para lo que significan esas dos variables definidas en el registro union. Lo único que veo "feo" es definir dentro del struct el union, en vez de definirlo aparte y luego simplemente invocar al union asignándole un nombre.
Cita:
Lo digo porque tal y como está definido, para acceder a frame_number de la primera forma tendría que "presuponer" que el nombre con el que se invoca a union es "number", o sea: Cita:
Mientras que de la forma que propongo veo más claro acceder así: Cita:
|
Cuando la definición de un tipo la haces dentro de una estructura o clase, es porque consideras que es propio de esa estructura o clase. Generalmente sólo la vas a utilizar desde ella. El mismo nombre puede ser utilizado en otro ámbito para definir un tipo totalmente distinto. Los motivos, de este tipo de declaraciones, no son de sintaxis sino mas bien de "encapsulamiento" en esa estructura. Si ese tipo va a ser de uso general, entonces puede ser mas coherente definirlo como independiente.
No se mucho de delphi, por lo que no te puedo ayudar en la conversión de union. Ni siquiera se si existe en delphi. Saludos. |
Bueno Escafandra, puedo estar de acuerdo con lo que dices, aunque reitero mi duda. Suponiendo ese caso inicial que propuse, con el encapsulamiento de union dentro de struct, yo preguntaba finalmente cómo acceder a alguno de sus campos (ya que nunca me he encontrado con nada similar, siempre lo hacía con alguna variable definida para el tipo/registro que fuese), y proponía el siguiente acceso y más obvio (para acceder a frame_number):
Cita:
Gracias de nuevo a todos por vuestro interés. |
Claro, esa es la forma de acceder a los elementos de esa union
Código:
miFLAC__FrameHeader.number.frame_number |
La franja horaria es GMT +2. Ahora son las 21:59:20. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi