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.
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;
}
size of union = 32
size of structure = 40
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.
Ancak, bir union değişkenini depolamak için gereken bellek, union yapının en büyük öğesi için gereken bellektir.
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;
}
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, C programlamasındaki foksiyonlara struct yapılarla benzer şekilde geçirilebilir.