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