Dalam tutorial ini, anda akan belajar mengenai kesatuan dalam pengaturcaraan C. Lebih khusus lagi, bagaimana membuat kesatuan, mengakses ahli-ahlinya dan mempelajari perbezaan antara kesatuan dan struktur.
Kesatuan adalah jenis yang ditentukan pengguna yang serupa dengan struktur di C kecuali satu perbezaan utama. Struktur memperuntukkan ruang yang cukup untuk menyimpan semua anggotanya sedangkan persatuan memperuntukkan ruang untuk menyimpan ahli terbesar sahaja.
Bagaimana untuk menentukan kesatuan?
Kami menggunakan union
kata kunci untuk menentukan kesatuan. Inilah contohnya:
union car ( char name(50); int price; );
Kod di atas menentukan jenis turunan union car
.
Buat pemboleh ubah kesatuan
Apabila kesatuan ditakrifkan, ia mewujudkan jenis yang ditentukan pengguna. Walau bagaimanapun, tidak ada memori yang diperuntukkan. Untuk memperuntukkan memori untuk jenis kesatuan tertentu dan bekerja dengannya, kita perlu membuat pemboleh ubah.
Inilah cara kita membuat pemboleh ubah penyatuan.
union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; )
Kaedah lain untuk membuat pemboleh ubah kesatuan adalah:
union car ( char name(50); int price; ) car1, car2, *car3;
Dalam kedua kes tersebut, pemboleh ubah kesatuan car1, car2, dan car penunjuk kesatuan3 union car
jenis dibuat.
Mengakses anggota kesatuan
Kami menggunakan .
operator untuk mengakses anggota kesatuan. Untuk mengakses pemboleh ubah penunjuk, kami menggunakan juga menggunakan ->
operator.
Dalam contoh di atas,
- Untuk mengakses harga untuk
car1
,car1.price
digunakan. - Untuk mengakses harga menggunakan
car3
, baik(*car3).price
ataucar3->price
boleh digunakan.
Perbezaan antara kesatuan dan struktur
Mari kita ambil contoh untuk menunjukkan perbezaan antara kesatuan 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; )
Pengeluaran
ukuran kesatuan = 32 ukuran struktur = 40
Mengapa perbezaan ukuran pemboleh ubah kesatuan dan struktur?
Di sini, ukuran sJob adalah 40 bait kerana
- saiznya
name(32)
ialah 32 bait - saiznya
salary
ialah 4 bait - saiznya
workerNo
ialah 4 bait
Walau bagaimanapun, saiz uJob adalah 32 bait. Ini kerana ukuran pemboleh ubah persatuan akan selalu menjadi ukuran elemen terbesarnya. Dalam contoh di atas, ukuran elemen terbesarnya, ( name(32)
), ialah 32 bait.
Dengan persatuan, semua ahli berkongsi memori yang sama .
Contoh: Mengakses Anggota Kesatuan
#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; )
Pengeluaran
Gaji = 0.0 Bilangan pekerja = 100
Untuk mengetahui di mana kesatuan digunakan, kunjungi Mengapa kita memerlukan C Union?