C Birlikleri (Örneklerle)

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?

unionBirlikleri 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 caroluş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.pricekullanılır.
  • Kullanarak fiyata erişmek için car3, ya (*car3).priceda car3->pricekullanı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 salary4 bayt
  • boyutu workerNo4 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.

Ilginç makaleler...