Mozilla Türkiye Gönüllü Topluluğu Blog

C Öğreticisi 16 (Birlikler(Unions))


Bu yazılar https://www.tutorialspoint.com/cprogramming/ adresindeki yazı dizilerinin çevirileridir.

Birlik, farklı veri türlerini aynı bellek konumunda saklamanızı sağlayan özel bir veri türüdür. Birçok üyeli bir birlik tanımlayabilirsiniz, ancak herhangi bir zamanda yalnızca bir üye bir değer içerebilir. Birlikleri aynı bellek konumunu çok amaçlı olarak kullanmanın etkili bir yolunu sunar.

Birlik(Union) Tanımlamak

Bir birlik tanımlamak için, birlik tanımını bir yapıyı tanımlarken yaptığınız gibi kullanmanız gerekir. Birlik ifadesi, programınız için birden fazla üyesi, olan yeni bir veri türü tanımlar. Birlik ifadesinin formatı aşağıdaki gibidir -

	
union [union etiketi] {
üye tanımlaması;
üye tanımlaması;
…
üye tanımlaması;
} [bir ya da daha çok union değişkeni];
	

Birlik etiketi isteğe bağlıdır ve her üye tanımı int i gibi normal bir değişken tanımıdır; veya float f; veya başka bir geçerli değişken tanımı. Birliğin tanımının sonunda, son noktalı virgülden önce bir veya daha fazla birlik değişkeni belirtebilirsiniz, ancak isteğe bağlıdır.

İşte Data isimli i,f ve str isimli 3 üyeli bir birlik tanımı -

	
union Data {
int i;
float f;
char str[20];
} data;
	

Artık bir veri türü değişkeni bir tamsayı, bir float veya karakter dizesi saklayabilir. Tek bir değişken, yani aynı bellek konumu, birden çok veri türünü depolamak için kullanılabileceği anlamına gelir. Gereksiniminize göre bir birlik içinde yerleşik veya kullanıcı tanımlı veri türlerini kullanabilirsiniz.

Bir birliğin bellekte kapladığı alan, birliğin en büyük üyesini tutacak kadar büyük olacaktır. Örneğin, yukarıdaki örnekte, veri türü 20 bayt bellek alanı kaplayacaktır, çünkü bu bir karakter dizesi tarafından işgal edebilecek maksimum boşluktur. Aşağıdaki örnek, yukarıdaki birleşim tarafından kullanılan toplam bellek boyutunu gösterir -

	
#include 
#include 
union Data {
int i;
float f;
char str[20];
};
int main( ) {
union Data data;
printf( “data tarafından kullanılan yer : %d\n”, sizeof(data));
return 0;
}
	

Yukarıdaki kod derlenip çalıştırıldığında -

	
data tarafından kullanılan yer : 20
	

Birlik Üyelerine Erişim

Birliğin herhangi bir üyesine erişmek için üye erişim operatörünü(.) kullanırız. Üye erişim operatörü, birleşim değişkeni adı ile erişmek istediğimiz birleşim üyesi arasında bir periyot olarak kodlanır.

Birleşim türü değişkenlerini tanımlamak için union anahtar sözcüğünü kullanırsınız. Aşağıdaki örnekte bir programda sendikaların nasıl kullanılacağı gösterilmektedir -

	
#include 
#include 
union Data {
int i;
float f;
char str[20];
};
int main( ) {
union Data data;
data.i = 10;
data.f = 220.5;
strcpy( data.str, “C Programlama”);
printf( “data.i : %d\n”, data.i);
printf( “data.f : %f\n”, data.f);
printf( “data.str : %s\n”, data.str);
return 0;
}
	

Kod derlenip çalıştırıldığında -

	
data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programlama
	

Burada, değişkene atanan son değer bellek konumunu işgal ettiğinden, birliğin i ve f değerlerinin değerlerinin bozulduğunu görebiliriz ve str üyesinin değerinin doğru yazdırılmasının nedeni budur.

Şimdi, aynı örneğe bir kez daha bakalım, burada birliğe sahip olmanın temel amacı olan bir değişkeni kullanacağız -

	
#include 
#include 
union Data {
int i;
float f;
char str[20];
};
int main( ) {
union Data data;
data.i = 10;
printf( “data.i : %d\n”, data.i);
data.f = 220.5;
printf( “data.f : %f\n”, data.f);
strcpy( data.str, “C Programlama”);
printf( “data.str : %s\n”, data.str);
return 0;
}
	

Kod derlenip çalıştırıldığında -

	
data.i : 10
data.f : 220.500000
data.str : C Programlama
	

Burada, tüm üyeler doğru şekilde yazdırılıyor çünkü bir seferde bir üye kullanılıyor.

​https://www.tutorialspoint.com/cprogramming/c_unions.htm​

Bir sonraki yazıya buradan ulaşabilirsiniz.