Union, farklı veri tiplerini aynı bellek alanında saklamak için kullanılan bir veri yapısıdır. Unions, Struct’lar gibi, birden fazla veri elemanını bir araya getirir, ancak bu elemanlar aynı bellek alanını paylaşır ve aynı anda sadece bir elemana erişim sağlar.

#include <stdio.h>

union VeriUnion 
{
    int tamSayi;
    float ondalikSayi;
    char* isim;
};

int main() 
{
    union VeriUnion veri;

    // Tam sayı elemanını kullanıyoruz
    veri.tamSayi = 42;
    printf("Tam Sayi: %d\n", veri.tamSayi);

    // Şimdi, aynı bellek alanında ondalık sayı elemanını kullanmaya çalışırsak:
    veri.ondalikSayi = 3.14;
    printf("Ondalik Sayi: %.2f\n", veri.ondalikSayi);
    
    veri.isim = "Ali";
    // Şimdi tekrar tam sayı elemanını kullanmaya çalışırsak:
    printf("Tam Sayi: %d\n", veri.tamSayi);
    printf("Ondalik Sayi: %.2f\n", veri.ondalikSayi);
    printf("Isim: %s\n", veri.isim);

    return 0;
}

Burada dikkat edilmesi gereken nokta Unions’larda birbirinden farklı veri elemanlarının bellek kullanımı aynı alan üzerinden olduğundan içerisinde bulunan veri elemanına her bir değer ataması yapıldıktan önce ki veri elemanının değerinin kaybolmasıdır.

Burada ki örnekte ilk başta tamSayi elemanına bir atama yapıp değerini ekrana yazdırabiliyoruz ancak sonra ki satırlarda ondalikSayi elemanına bir değer ataması yapılınca tamSayi elemanının değeri kaybediliyor. Ve daha da sonrasında isim elemanına ardından gelen bir değer ataması yapılınca da bu sefer de ondalikSayi elemanı değerini kaybediyor bunun sebebi Union’ların Struct’larda ki gibi veri elemanları için ayrı ayrı bir bellek alanı oluşturmamalarıdır. Hepsi aynı bellek alanını paylaştıklarından her birine değer ataması yapılsa da en son değer ataması yapılan veri elemanı güncel değer olmuş oluyor.