Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/11/2014, 05:27
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Uniones. Dos dudas

un int ocupa 4 bytes, mientras que un char, 1 byte. Lo que hace la union es que ambas estructuras puedan ocupar las mismas posiciones en memoria... pero eso no quiere decir que ambas ocupen lo mismo.

Cuando asignas el valor al int estás modificando el valor de 4 bytes, mientras que al asignar un valor al char estás modificando únicamente 1 byte... los otros 3 no verán alterado su valor. Por eso al imprimir el int ves un resultado erróneo.

Un ejemplo con valores:

Código C++:
Ver original
  1. // Como no esta inicializada la memoria, suponemos un valor aleatorio:
  2. // numero = 67458154 o 0x0405546A
  3. // letra = j o 0x6A
  4. U caracter;
  5.  
  6. // Modificamos el char
  7. // numero(hex) = 67458113 o 0x04055441
  8. // letra = A o 0x41
  9. caracter.letra = 'A';

Como ves, "letra" únicamente modifica el último byte correspondiente a "numero", el resto permanece inalterado.