Struct ve Union: C Dilinde Özel Veri Yapıları Oluşturma

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

Struct ve Union: Veri Gruplandırma Teknikleri​


C dilinde kendi veri tiplerimizi oluşturmamıza olanak tanıyan bu yapılar, özellikle sistem programlama ve veri yönetimi aşamalarında kritik rol oynar.



1. Struct (Yapılar): Farklı Tiplerin Birliği​


struct, birbirleriyle ilişkili ancak farklı türdeki verileri (member) tek bir isim altında toplar. Bellekte, içerisindeki tüm elemanlar için ayrı ayrı yer ayrılır.

C:
struct Ogrenci {
char isim[50];
int numara;
float ortalama;
};

// Kullanımı
struct Ogrenci ogr1 = {"Ali", 101, 3.50};
printf("Ogrenci: %s, Not: %.2f", ogr1.isim, ogr1.ortalama);



2. Union (Birlikler): Bellek Tasarrufu​


union yapısı, struct ile benzer şekilde tanımlanır ancak çok temel bir farkı vardır: İçerisindeki tüm elemanlar aynı bellek alanını paylaşır. Bellekte ayrılan yer, en büyük elemanın boyutu kadardır.

C:
union Veri {
int i;
float f;
char c;
};

union Veri v;
v.i = 10;
v.f = 22.5; // Şimdi 'i' değeri bozuldu, çünkü aynı yer kullanılıyor!



3. Struct ve Union Arasındaki Temel Farklar​


ÖzellikStruct (Yapı)Union (Birlik)
Bellek TahsisiHer üye için ayrı bellek alanı ayrılır.Tüm üyeler tek bir (en büyük) alanı paylaşır.
BoyutÜyelerin boyutlarının toplamı (Padding dahil).En büyük üyenin boyutu kadardır.
ErişimTüm üyelere aynı anda erişilebilir.Aynı anda sadece bir üye anlamlı veri tutar.
Kullanım AmacıKarmaşık nesneleri modellemek.Bellek tasarrufu veya donanım seviyesinde veri dönüşümü.



4. Bit-Fields (Bit Alanları) Kullanımı​


struct içerisinde bellekten daha fazla tasarruf etmek için elemanların tam olarak kaç bit kaplayacağını belirleyebilirsiniz. Özellikle gömülü sistemlerde "flag" (bayrak) tutmak için mükemmeldir.

C:
struct Kontrol {
unsigned int lambaAcik : 1;  // Sadece 1 bit kaplar (0 veya 1)
unsigned int parlaklik  : 4;  // 0-15 arası değerler için 4 bit
};



Sonuç​


Gerçek dünya verilerini modellerken çoğunlukla Struct yapısını kullanırız. Ancak kısıtlı belleğe sahip sistemlerde veya bir veriyi hem int hem de byte dizisi olarak okumak istediğimiz (type punning) durumlarda Union hayat kurtarıcıdır.
 
Geri
Üst