Union sebenarnya sama dengan struktur, hanya saja elemen yang bisa dipakai pada waktu yang bersamaan hanyalah satu walaupun dalam union tersebut terdapat lebih dari satu elemen. Akibatnya, ukuran dari suatu union adalah ukuran maksimum dari elemen secara individual sedangkan ukuran suatu struktur adalah jumlahan dari ukuran elemen-elemennya. Perhatikan contoh berikut :
File union.c
#include <stdio.h>
union contoh{
int satu;
int dua;
}misal;
main()
{
int x;
int y;
x=2;
y=1;
misal.satu = x;
misal.dua = y;
printf(”Nilai unionnya = %d\n”, misal.satu);
printf(”Nilai unionnya = %d\n”, misal.dua);
}
$ gcc -o union union.c
$ ./union
Nilai unionnya = 1
Nilai unionnya = 1
$
Biasanya union digunakan untuk menampung variabel yang tipenya tidak tentu dan juga ukurannya. Misalnya pada contoh berikut akan dicobakan untuk melakukan seleksi tipe data dari suatu variabel yang diinputkan via operator dan program kita ini akan berusaha menampungnya ke elemen union yang tepat. Dalam hal ini akan dipilihkan apakah integer bertanda atau signed integer atau biasa disebut integer saja (integer yang mengandung bilangan bulat negatif dan bilangan bulat positif, termasuk nol) ataukah unsigned integer yang biasa dikenal sebagai integer/bilangan bulat positif, disebut tak bertanda karena kita tidak memerlukan tanda +/- untuk menggunakannya.
File union2.c
#include <stdio.h>
union bulat{
int bertanda;
unsigned int tak_bertanda;
}bilangan;
main()
{
int x;
printf(”Isikan sebuah bilangan bulat : “);
scanf(”%d”, &x);
if (x < 0){
printf("x adalah bilangan bulat negatif\n");
bilangan.bertanda = x;
printf("Nilai unionnya = %d karena itu dimasukkan ke kategori integer
bertanda\n", bilangan.bertanda);
}
else {
printf("x adalah bilangan bulat nol atau positif\n");
bilangan.tak_bertanda = x;
printf("Nilai unionnya = %d karena itu dimasukkan ke kategori integer
tak bertanda\n", bilangan.tak_bertanda);
}
}
$ gcc -o union2 union2.c
$ ./union2
Isikan sebuah bilangan bulat : -2
x adalah bilangan bulat negatif
Nilai unionnya = -2 karena itu dimasukkan ke kategori integer bertanda
$ ./union2
Isikan sebuah bilangan bulat : 0
x adalah bilangan bulat nol atau positif
Nilai unionnya = 0 karena itu dimasukkan ke kategori integer tak bertanda
$ ./union2
Isikan sebuah bilangan bulat : 2
x adalah bilangan bulat nol atau positif
Nilai unionnya = 2 karena itu dimasukkan ke kategori integer tak bertanda
$
Tentu saja bisa saja kita menggunkan kata kunci struct sebagai ganti dari union, namun alokasi memori yang digunakan jelas lebih efisien jika digunakan union karena ukurannya lebih kecil jika dibandingkan dengan struct.
Dedicated for Light Intermutimedia
Perusahaan Software Pulsa