TOC | Prev | Next

Unions

Unions let you overlap different types in memory.

union-size.c

#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;
}

$ union-size

Size of employee.pay = 4
Andy Lester's yearly rate = 50000
Andy Lester's hourly rate =  4.25
Andy Lester's yearly rate = 1082654720
TOC | Prev | Next