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
| Özellik | Struct (Yapı) | Union (Birlik) |
|---|---|---|
| Bellek Tahsisi | Her ü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şim | Tü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.