Bu eğitimde, C programlamadaki sendikalar hakkında bilgi edineceksiniz. Daha spesifik olarak, sendikaların nasıl kurulacağı, üyelerine nasıl erişileceği ve sendikalar ile yapılar arasındaki farkların nasıl öğrenileceği.
Birleşim, bir anahtar fark dışında, C'deki yapılara benzer kullanıcı tanımlı bir türdür. Yapılar, sendikaların yalnızca en büyük üyeyi depolamak için alanı ayırdığı tüm üyelerini depolamak için yeterli alan ayırır.
Bir birlik nasıl tanımlanır?
union
Birlikleri tanımlamak için anahtar kelimeyi kullanırız. İşte bir örnek:
union car ( char name(50); int price; );
Yukarıdaki kod türetilmiş bir türü tanımlar union car
.
Birleşim değişkenleri oluşturun
Bir birleşim tanımlandığında, kullanıcı tanımlı bir tür oluşturur. Ancak, bellek ayrılmamıştır. Belirli bir birleşim tipi için bellek ayırmak ve onunla çalışmak için değişkenler oluşturmamız gerekir.
İşte sendika değişkenlerini nasıl oluşturduğumuz.
union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; )
Birleşim değişkenleri oluşturmanın başka bir yolu şudur:
union car ( char name(50); int price; ) car1, car2, *car3;
Her iki durumda da, car1, car2 birleşim değişkenleri ve car3 türünde bir birleşim işaretçisi union car
oluşturulur.
Bir sendikanın üyelerine erişim
.
Operatörü bir sendika üyelerine erişmek için kullanıyoruz . İşaretçi değişkenlerine erişmek için ->
operatörü de kullanırız .
Yukarıdaki örnekte,
- İçin erişim ücreti için
car1
,car1.price
kullanılır. - Kullanarak fiyata erişmek için
car3
, ya(*car3).price
dacar3->price
kullanılabilir.
Birlikler ve yapılar arasındaki fark
Sendikalar ve yapılar arasındaki farkı göstermek için bir örnek alalım:
#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; )
Çıktı
birlik boyutu = 32 yapı boyutu = 40
Birlik ve yapı değişkenlerinin boyutundaki bu fark neden?
Burada sJob'un boyutu 40 bayttır çünkü
- boyutu
name(32)
32 bayttır - boyutu
salary
4 bayt - boyutu
workerNo
4 bayt
Ancak uJob'un boyutu 32 bayttır. Bunun nedeni, bir birleşim değişkeninin boyutu her zaman en büyük öğesinin boyutu olacaktır. Yukarıdaki örnekte, en büyük elemanının ( name(32)
) boyutu 32 bayttır.
Bir sendika ile tüm üyeler aynı hafızayı paylaşır .
Örnek: Sendika Üyelerine Erişim
#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; )
Çıktı
Maaş = 0.0 Çalışan sayısı = 100
Sendikaların nerede kullanıldığını öğrenmek için C Sendikalarına Neden ihtiyacımız var? Sayfasını ziyaret edin.