Union pada bahasa C adalah tipe data yang mirip dengan struct, yaitu beberapa kumpulan variabel dengan berbagai tipe data lain, namun element-element pada union memiliki alamat memori yang sama. Union digunakan untuk menghemat memori, karena element-element union menggunakan alokasi memori yang sama. Ukuran memorinya menyesuaikan dari yang terbesar pada element tersebut, sehingga penggunaan element-elementnya digunakan secara bergantian.
Cara Membuat Union Pada Bahasa C
Pada bahasa C, Union di buat dengan perintah atau kata kunci union, lalu diikuti dengan nama union-nya. Setelah itu kita menggunakan kurung kurawal untuk mendefinisikan member dan tipe datanya.
union nama_union{
element;
element;
};
Contoh:
#include <stdio.h>
union{
int i;
int j;
}k;
void main(){
k.i=25;
k.j=38;
printf("nilai i = %d\n",k.i);
printf("nilai j = %d",k.j);
}
Hasilnya :
Keterangan :
Pada kode diatas, nilai pada variabel i di beri nilai 25 dan j di beri nilai 38. Dari kedua variabel tersebut, sama-sama menjadi element union k dan memiliki tipe data yang sama yaitu integer. Sehingga hasil nilai yang ada pada kedua elemet tersebut adalah sama, walaupun diisi dengan nilai yang berbeda.
Apabila menggunakan typedef, maka kita tidak perlu menulis union di setiap penggunaanya.
Contoh:
// mendefinisikan union
typedef union {
int i;
int j;
}k;
// menggunakan union
k ls1;
Union dengan Struct
Sebenarnya, union ini sama seperti tipe data Struct, yang membedakan hanyalah pada alokasi memori. Element-element union menggunakan alokasi memori di satu alamat memori yang sama yang diambil dari ukuran member yang paling besar. Sedangkan Struct menggunakan alokasi memori pada alamat memori yang berbeda.
Contoh program :
#include <stdio.h>
void main(){
struct Form1 {
char *nama;
unsigned int usia;
};
union Form2 {
char *nama;
unsigned int usia;
};
struct Form1 ls1;
ls1.nama = "Budi";
ls1.usia = 21;
printf("Form1 : %d (address = %x)\n", sizeof(ls1), &ls1);
printf(" - nama : %d (address = %x)\n", sizeof(ls1.nama), &ls1.nama);
printf(" - usia: %d (address = %x)\n", sizeof(ls1.usia), &ls1.usia);
union Form2 ls2;
ls2.nama = "Yatno";
ls2.usia = 30;
printf("Form2 : %d (address = %x)\n", sizeof(ls2), &ls2);
printf(" - nama : %d (address = %x)\n", sizeof(ls2.nama), &ls2.nama);
printf(" - usia : %d (address = %x)\n", sizeof(ls2.usia), &ls2.usia);
}
Hasilnya :
Seperti tampak gambar diatas, terdapat perbedaan ukuran memori dari bariabel nama dan usia pada Form1 (struct) dan Form2 (union). Ukuran memori Struct Form1 alamatnya berbeda-beda, Sedangkan union Form2 mempunyai alamat memori yang sama. Ukuran memori union Form2 adalah 8, karena mengambil dari ukuran yang paling besar, yaitu ukuran dari nama.
Begitulah pembahasan mengenai penggunaan Tipe Data Union pada bahasa C. Untuk selanjutnya kita akan membahas Tipe Data String.
Semoga bermanfaat ..