C'de Union ve Struct Yapıları

C  Programlama  Linux 

 16 Ocak 2018 - Türkiye



Follow
Follow
Follow

2 dakikalık okuma

union ve struct arasındaki kullanım farkı

union pek çok açıdan struct yapıya benzer olsa da, aralarındaki farkı anlamak çok önemlidir.

Turkish Union

Birincil fark, bu örnekle gösterilebilir:

#include <stdio.h>
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", sizeof(uJob));
   printf("\nsize of structure = %d", sizeof(sJob));
   return 0;
}

Çıktı

size of union = 32
size of structure = 40

struct yapılara union yapıdan daha fazla bellek tahsis edilir

Yukarıdaki örnekte görüldüğü gibi, union ve struct yapı arasında bellek ayırmada bir fark vardır.

struct değişkenini depolamak için gereken bellek miktarı, tüm üyelerin bellek boyutunun toplamıdır.

Alternative text

Ancak, bir union değişkenini depolamak için gereken bellek, union yapının en büyük öğesi için gereken bellektir.

Alternative text

Aynı anda yalnızca bir union üyesine erişilebilir

struct durumunda, üyelerinin tümüne her an erişilebilir.

Ancak, union durumunda, bir kerede yalnızca üyelerinden birine erişilebilir ve diğer tüm üyeler çöp değerleri içerir.

#include <stdio.h>
union job
{
   char name[32];
   float salary;
   int workerNo;
} job1;

int main()
{
   printf("Enter name:\n");
   scanf("%s", &job1.name);

   printf("Enter salary: \n");
   scanf("%f", &job1.salary);

   printf("Displaying\nName :%s\n", job1.name);
   printf("Salary: %.1f", job1.salary);

   return 0;
}

Çıktı

Enter name 
Hillary
Enter salary
1234.23
Displaying
Name: f%Bary
Salary: 1234.2

Not: İsim için farklı çöp değeri veya empty string (boş dize) alabilirsiniz.

Başlangıçta programda Hillary, job1.name‘de saklanır ve job1‘in diğer tüm üyeleri, örneğin salary, workerNo çöp değerleri içerecektir.

Ancak, kullanıcı salary değerini girdiğinde; 1234.23, job1.salary‘de saklanacak ve diğer üyeler de, örn. name, workerNo, artık çöp değerleri içerecek.

Böylece çıktıda, salary doğru bir şekilde yazdırılır, ancak name bazı random string karakterleri (rastgele dizgeleri) gösterir.

Union Yapıyı Bir Fonksiyona Geçirme

Union, C programlamasındaki foksiyonlara struct yapılarla benzer şekilde geçirilebilir.



Paylaş:



En Yeni İçerikler

İlgili İçerikler