Unions let you overlap different types in memory.
#include <stdio.h>
#include <string.h>
struct employee {
char name[40];
char pay_type;
union {
float hourly;
long yearly;
} pay;
};
int main( void ) {
struct employee me;
strcpy( me.name, "Andy Lester" );
printf( "Size of employee.pay = %lu\n", sizeof( me.pay ) );
me.pay_type = 'S';
me.pay.yearly = 50000; /* 50 thou a year'll buy a lotta beer */
printf( "%s's yearly rate = %ld\n", me.name, me.pay.yearly );
me.pay_type = 'H';
me.pay.hourly = 4.25;
printf( "%s's hourly rate = %5.2f\n", me.name, me.pay.hourly );
/* Reference hourly incorrectly as yearly */
printf( "%s's yearly rate = %ld\n", me.name, me.pay.yearly );
return 0;
}
Size of employee.pay = 4 Andy Lester's yearly rate = 50000 Andy Lester's hourly rate = 4.25 Andy Lester's yearly rate = 1082654720TOC | Prev | Next