C Öğreticisi 16 (Birlikler(Unions))

Bu yazılar 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 <stdio.h>

#include <string.h>

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 <stdio.h>

#include <string.h>

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 <stdio.h>

#include <string.h>

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

Last updated