Dalam tutorial ini, Anda akan belajar tentang serikat pekerja dalam pemrograman C. Lebih khusus lagi, cara membuat serikat, mengakses anggotanya, dan mempelajari perbedaan antara serikat dan struktur.
Serikat pekerja adalah tipe yang ditentukan pengguna yang mirip dengan struct di C kecuali untuk satu perbedaan utama. Struktur mengalokasikan cukup ruang untuk menyimpan semua anggotanya di mana serikat pekerja mengalokasikan ruang untuk menyimpan hanya anggota terbesar.
Bagaimana cara mendefinisikan serikat pekerja?
Kami menggunakan union
kata kunci untuk mendefinisikan serikat pekerja. Berikut contohnya:
union car ( char name(50); int price; );
Kode di atas mendefinisikan tipe turunan union car
.
Buat variabel gabungan
Ketika gabungan ditentukan, itu membuat tipe yang ditentukan pengguna. Namun, tidak ada memori yang dialokasikan. Untuk mengalokasikan memori untuk tipe gabungan tertentu dan bekerja dengannya, kita perlu membuat variabel.
Inilah cara kami membuat variabel gabungan.
union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; )
Cara lain untuk membuat variabel gabungan adalah:
union car ( char name(50); int price; ) car1, car2, *car3;
Dalam kedua kasus, variabel gabungan car1, car2, dan penunjuk gabungan car3 union car
akan dibuat.
Akses anggota serikat
Kami menggunakan .
operator untuk mengakses anggota serikat. Untuk mengakses variabel pointer, kami menggunakan juga menggunakan ->
operator.
Dalam contoh di atas,
- Untuk mengakses harga
car1
,car1.price
digunakan. - Untuk mengakses harga menggunakan
car3
, salah satu(*car3).price
ataucar3->price
dapat digunakan.
Perbedaan antara serikat dan struktur
Mari kita ambil contoh untuk menunjukkan perbedaan antara serikat dan struktur:
#include union unionJob ( //defining a union char name(32); float salary; int workerNo; ) uJob; struct structJob ( char name(32); float salary; int workerNo; ) sJob; int main() ( printf("size of union = %d bytes", sizeof(uJob)); printf("size of structure = %d bytes", sizeof(sJob)); return 0; )
Keluaran
ukuran penyatuan = 32 ukuran struktur = 40
Mengapa ada perbedaan dalam ukuran variabel serikat dan struktur?
Di sini, ukuran sJob adalah 40 byte karena
- ukurannya
name(32)
adalah 32 byte - ukurannya
salary
adalah 4 byte - ukurannya
workerNo
adalah 4 byte
Namun, ukuran uJob adalah 32 byte. Itu karena ukuran variabel gabungan akan selalu menjadi ukuran elemen terbesarnya. Dalam contoh di atas, ukuran elemen terbesarnya, ( name(32)
), adalah 32 byte.
Dengan serikat pekerja, semua anggota berbagi memori yang sama .
Contoh: Mengakses Anggota Serikat
#include union Job ( float salary; int workerNo; ) j; int main() ( j.salary = 12.3; // when j.workerNo is assigned a value, // j.salary will no longer hold 12.3 j.workerNo = 100; printf("Salary = %.1f", j.salary); printf("Number of workers = %d", j.workerNo); return 0; )
Keluaran
Gaji = 0,0 Jumlah pekerja = 100
Untuk mempelajari di mana serikat digunakan, kunjungi Mengapa kita membutuhkan Serikat C?