Sama seperti struct, union juga User Defined Data Type dalam bahasa C yang berarti union merupakan tipe data yang pengguna buat sendiri. Union juga bisa memiliki banyak anggota type data lain. Namun bedanya dengan struct adalah pada union, setiap anggotanya berada pada satu memori.
#include <stdio.h> //deklarasi union union coba { int x, y; }; int main() { union coba t; t.x = 0, t.y = 0; t.x = 2; printf("x = %d, y = %d\n\n", t.x, t.y); t.y = 6; printf("x = %d, y = %d",t.x, t.y); return 0; }
Perhatikan baris ke-11, pada struct nilai x dan y bernilai 0. Kemudian nilai x berubah menjadi 2 pada baris ke-13. Pada union karena tiap anggota berbagi memori yang sama, maka tiap mengubah satu nilai akan mengubah semuanya. Sehingga keluaran dari program tersebut adalah:
x = 2, y = 2
x = 6, y = 6
Karena berbagi memori yang sama, maka besar dari memori union bergantung pada memori terbesar dari anggotanya.
Pointer Dan Union
Seperti halnya struct, anggota dari union dapat kita akses dengan menggunakan (->).
#include <stdio.h> //deklarasi union union coba { int x; }; int main() { union coba t; union coba *ptr = &t; t.x = 10; printf("x = %d",ptr->x); return 0; }
Dengan keluaran:
10
Menggunakan Typedef
Terkadang typedef digunakan untuk mempersingkat penulisan program. Hal ini juga berlaku pada union.
#include <stdio.h> //deklarasi union typedef union coba_u{ int x; }coba; int main() { coba t; coba *ptr = &t; t.x = 10; printf("x = %d",ptr->x); return 0; }
Perbedaannya dengan potongan kode sebelumnya adalah pada baris ke-10 dan 12. Meskipun hasilnya sama, setidaknya tidak perlu menuliskan kata kunci union setiap kali ingin menggunakan
coba.
Union Dan Struct
Struct dapat menyimpan banyak variabel dengan tipe data yang berbeda, termasuk union.
#include <stdio.h> #include <string.h> typedef struct { char make[20]; int model_year; int id_type; /* 0 for id_num, 1 for VIN */ union { int id_num; char VIN[20]; } id; } vehicle; int main() { vehicle car1; strcpy(car1.make, "Ford"); car1.model_year = 2017; car1.id_type = 0; car1.id.id_num = 123098; printf("Car %s, %d", car1.make, car1.model_year); return 0; }
code diambil dari sololearn.
Untuk mengaksesnya sendiri, gunakan (.) atau (->) sesuai tipe variabel. Jika pointer maka gunakan (->) dan (.) jika bukan. Pada contoh program tersebut, terdapat
vehicle yang memiliki
id dengan tipe union. Sehingga untuk mengakses
id_num, harus terlebih dahulu mengakses
id seperti pada baris 19.
Selain union yang menjadi anggota dari struct, bisa juga struct yang menjadi bagian (anggota) dari union.
Kenapa Menggunakan Union?
Mungkin timbul pertanyaan, jika sudah ada struct kenapa menggunakan union? Terlebih lagi union hanya dapat menyimpan satu nilai saja. Pertanyaan tersebut bisa kalian temukan jawabannya di Why do we need C Unions? – Stack Overflow.
Sumber : https://cahinfor.com/union-dalam-bahasa-c/