Listing 2

main()
      {
      int i = 0XFFFF;
      double d = 123456789.123456789;
      char c;
      
      /*  This is okay, cast does nothing */
      (char) c = 'A';
      
      printf("\n I is %x", i);
      
      (char) i = 'A';
      
      printf("\n I is %x", i);
      
      *(&(char)i + 1) = 'B';
      
      printf("\n I is %x", i);
      
      /*  Show it the "right" way */
      i = 0XFFFF;
      
      printf("\n I is %x", i);
      
      *((char *) &i + 1) = 'B';
      
      printf("\n I is %x", i);
      
      /*  Now try it with a double */
      
      printf("\n d is %lf", d);
      
      (int) d = 'C';
      
      printf("\n d is %lf", d);
      
      /*  This causes a compiler error -- */
      /*  This was removed so that the listing could be
         produced */
      
      (double) i = 'A';
      
      }

Results:
 
 I is ffff
 I is ff41
 I is 4241
 I is ffff
 I is 42ff
 d is 123456789.123457
 d is 123456789.123048