home *** CD-ROM | disk | FTP | other *** search
/ C by Discovery (4th Edition) / C_By_Discovery_4th_Edition.tar / C_By_Discovery_4th_Edition / _DISK_ / ch7 / union3.c < prev    next >
C/C++ Source or Header  |  2005-06-16  |  2KB  |  50 lines

  1. /*               union3.c
  2.  *
  3.  *   Synopsis  - Declares and initializes a union and displays 
  4.  *               information about its addresses and contents.
  5.  *   Objective - To illustrate the properties of memory
  6.  *               allocation with unions.
  7.  */
  8.  
  9. /* Include Files */
  10. #include <stdio.h>
  11.  
  12. /* Constant Definitions */
  13. #define STRING_LGTH  20
  14.  
  15. int main( void )
  16. {
  17.      union x {                                  /* Note 1 */
  18.           int intmem;
  19.           float floatmem;
  20.           unsigned bitmem:4;
  21.           char stringmem[STRING_LGTH];
  22.      } tryit;
  23.  
  24.      tryit.intmem = 0x1248;                     /* Note 2 */
  25.                                                 /* Note 3 */
  26.      printf( "Sizeof the union and its members.\n" );
  27.      printf( "---------------------------------\n" );
  28.      printf( "sizeof(union x)  %d\n", sizeof( union x ) );
  29.      printf( "sizeof(tryit.intmem) %d\n", sizeof(tryit.intmem));
  30.      printf( "sizeof(tryit.floatmem) %d\n", sizeof( tryit.floatmem ));
  31.      printf( "sizeof(tryit.stringmem) %d\n\n", sizeof( tryit.stringmem ));
  32.                                                 /* Note 4 */
  33.      printf( "Addresses of the union and the members.\n" );
  34.      printf( "---------------------------------------\n" );
  35.      printf( "&tryit  %x.\n", &tryit );
  36.      printf( "&tryit.intmem  %x\n", &(tryit.intmem) );
  37.      printf( "&tryit.floatmem %x\n", &(tryit.floatmem) );
  38.      printf( "tryit.stringmem  %x.\n\n", tryit.stringmem );
  39.                                                 /* Note 5 */
  40.      printf( "Contents of members of the union.\n" );
  41.      printf( "---------------------------------\n" );
  42.      printf( "intmem = %x.\n", tryit.intmem );
  43.      printf( "tryit.floatmem %5.2f\n", tryit.floatmem );
  44.      printf( "tryit.bitmem %x\n", tryit.bitmem );
  45.      printf( "tryit.stringmem[0] %x\n", tryit.stringmem[0] );
  46.      printf( "tryit.stringmem[1] %x\n", tryit.stringmem[1] );
  47.      printf( "tryit.stringmem[2] %x\n\n", tryit.stringmem[2] );
  48.      return 0;
  49. }
  50.