C'de Yapı ve Birlik Arasındaki Fark
Yapı Nedir?
Yapı, C programlama dilinde, farklı veri türlerindeki mantıksal olarak ilişkili veri öğelerini bir araya getiren, kullanıcı tanımlı bir veri türüdür.
Tüm yapı elemanları bitişik hafıza konumlarında saklanır. Yapı türü değişkeni, farklı veri türlerindeki birden fazla veri öğesini tek bir ad altında saklayabilir.
Birlik Nedir?
Union tıpkı bir yapı gibi kullanıcı tanımlı bir veri türüdür. Union, farklı tür ve büyüklükteki nesneleri bir araya getirir. Birleşim değişkeni, en büyük birleşim değişkenini tutacak alana eşit bellek alanını ayırır. Farklı türdeki nesnelerin aynı konumu paylaşmasına olanak tanır.
Bildirilen Yapının Sözdizimi
struct [name of the structure] { type member1; type member2; type member3; };
Yapı, “struct” anahtar sözcüğü ve yapının adı kullanılarak bildirilir. 1 numara, 2 numara, 3 numara yapının bireysel üyeleridir. Gövde kısmı noktalı virgül (;) ile sonlandırılır.
C Programlamada Yapı Örneği
#include <stdio.h> struct student { char name[60]; int roll_no; float marks; } sdt; int main() { printf("Enter the following information:\n"); printf("Enter student name: "); fgets(sdt.name, sizeof(sdt.name), stdin); printf("Enter student roll number: "); scanf("%d", & sdt. roll_no); printf("Enter students marks: "); scanf("%f", & sdt.marks); printf("The information you have entered is: \n"); printf("Student name: "); printf("%s", sdt.name); printf("Student roll number: %d\n", sdt. roll_no); printf("Student marks: %.1f\n", sdt.marks); return 0; }
Yukarıdaki programda öğrenci adı verilen bir yapı oluşturulmuştur. Bu yapının üç veri üyesi vardır: 1) ad (dize), 2) roll_no (tamsayı) ve 3) işaretler (float).
Daha sonra öğrenci bilgilerini depolamak ve bilgisayar ekranında görüntülemek için sdt yapı değişkeni oluşturulur.
Çıktı:
Aşağıdaki bilgileri giriniz:
Öğrenci adını girin: James
Öğrenci rulo numarasını giriniz: 21
Öğrenci notlarını girin: 67
Girdiğiniz bilgiler şunlardır:
Öğrenci adı: John
Öğrenci rulo numarası: 21
Öğrenci notları: 67.0
Birlik Bildirmenin Sözdizimi
union [name of union] { type member1; type member2; type member3; };
Birlik, “birlik” anahtar sözcüğü ve birliğin adı kullanılarak bildirilir. 1 numara, 2 numara, 3 numara sendikanın bireysel üyeleridir. Gövde kısmı noktalı virgül (;) ile sonlandırılır.
C Programlamada Birlik Örneği
#include <stdio.h> union item { int x; float y; char ch; }; int main( ) { union item it; it.x = 12; it.y = 20.2; it.ch = 'a'; printf("%d\n", it.x); printf("%f\n", it.y); printf("%c\n", it.ch); return 0; }
Çıktı:
1101109601
20.199892
a
Yukarıdaki programda x ve y değerlerinin bozulduğunu görebilirsiniz. Yalnızca ch değişkeni beklenen sonucu yazdırır. Bunun nedeni, birlik içinde hafıza konumunun tüm üye veri türleri arasında paylaşılmasıdır.
Bu nedenle, değeri o anda saklanan tek veri üyesi hafızada yer kaplayacaktır. Ch değişkeninin değeri en sonunda saklandı, dolayısıyla geri kalanın değeri değişkenler kayıp.
Yapı Vs. Birlik
Yapı ve birlik arasındaki önemli fark şudur:
Structure | sendika |
---|---|
Bir yapıyı tanımlamak için struct anahtar sözcüğünü kullanabilirsiniz. | Bir birleşim tanımlamak için bir birleşim anahtar sözcüğünü kullanabilirsiniz. |
Yapı içindeki her üyeye benzersiz bir hafıza konumu atanır. | Birleşimde, bir bellek konumu tüm veri üyeleri tarafından paylaşılır. |
Bir veri üyesinin değerinin değiştirilmesi yapıdaki diğer veri üyelerini etkilemeyecektir. | Bir veri üyesinin değerini değiştirmek, birlikteki diğer veri üyelerinin değerini değiştirecektir. |
Aynı anda birden fazla üyeyi başlatmanıza olanak tanır. | Birliğin yalnızca ilk üyesini başlatmanıza olanak tanır. |
Yapının toplam boyutu, her veri üyesinin boyutunun toplamıdır. | Birliğin toplam boyutu en büyük veri üyesinin boyutudur. |
Esas olarak çeşitli veri türlerini depolamak için kullanılır. | Esas olarak mevcut birçok veri türünden birini depolamak için kullanılır. |
İç parametrelerde yazılan her üye için yer kaplar. | İç parametrelerde yazılan en büyük boyuta sahip üye için yer kaplar. |
Herhangi bir üyeyi aynı anda geri alabilirsiniz. | Birlik içinde aynı anda bir üyeye erişebilirsiniz. |
Esnek diziyi destekler. | Esnek bir diziyi desteklemez. |
Yapının avantajları
Yapıyı kullanmanın artıları/faydaları şunlardır:
- Yapılar aynı konuya ilişkin birden fazla veriyi aynı yerde bir araya toplar.
- Ad, soyadı vb. gibi benzer veri türlerine ve parametrelere ait verileri toplamak istediğinizde faydalıdır.
- Tek bir isim kullanarak tüm kaydı temsil edebildiğimiz için bakımı çok kolaydır.
- Yapı olarak, tek bir parametre kullanarak tüm kayıt setini herhangi bir fonksiyona aktarabiliriz.
- Benzer türlerde daha fazla kayıt depolamak için bir dizi yapıyı kullanabilirsiniz.
Birliğin avantajları
Union kullanmanın artıları/faydaları şunlardır:
- Yapıya göre hafızada daha az yer kaplar.
- Union kullandığınızda yalnızca son değişkene doğrudan erişilebilir.
- Birleştirme, iki veya daha fazla veri üyesi için aynı bellek konumunu kullanmanız gerektiğinde kullanılır.
- Yalnızca bir veri üyesinin verilerini tutmanıza olanak tanır.
- Tahsis edilen alan, veri üyesinin maksimum boyutuna eşittir.
Yapının dezavantajları
Yapıyı kullanmanın eksileri/dezavantajları şunlardır:
- BT projesinin karmaşıklığı sınırın ötesine geçerse yönetilmesi zorlaşır.
- Bir koddaki bir veri yapısının değişmesi, birçok başka yerde de değişiklik yapılmasını gerektirir. Bu nedenle değişiklikleri takip etmek zorlaşır.
- Yapı daha yavaştır çünkü tüm veriler için depolama alanı gerektirir.
- Yapıda aynı anda herhangi bir üyeyi alabilirsiniz, oysa birlik içinde aynı anda bir üyeye erişebilirsiniz.
- Yapı, iç parametrelerde yazılan her üye için yer kaplarken, union, iç parametrelerde yazılan en büyük boyuta sahip üye için yer kaplar.
- Yapı esnek diziyi destekler. Union esnek bir diziyi desteklemiyor.
Birliğin dezavantajları
Union kullanmanın eksileri/dezavantajları şunlardır:
- Aynı anda yalnızca bir sendika üyesini kullanabilirsiniz.
- Tüm birleşim değişkenleri aynı anda farklı değerlerle başlatılamaz veya kullanılamaz.
- Union, tüm üyelerine ortak bir depolama alanı tahsis eder.
ANAHTAR FARKLAR:
- Yapı içindeki her üyeye benzersiz bir hafıza konumu atanırken, birleşimde bir hafıza konumu tüm veri üyeleri tarafından paylaşılır.
- Bir veri üyesinin değerinin değiştirilmesi yapıdaki diğer veri üyelerini etkilemezken, bir veri üyesinin değerinin değiştirilmesi birlik içindeki diğer veri üyelerinin değerini değiştirecektir.
- Yapı esas olarak çeşitli veri türlerini depolamak için kullanılırken, birleşim esas olarak birçok veri türünden birini depolamak için kullanılır.
- Yapı olarak herhangi bir üyeye aynı anda erişebilirsiniz, buna karşılık union'da aynı anda bir üyeye erişebilirsiniz.
- Yapı esnek diziyi desteklerken birleşim esnek diziyi desteklemez.
Ayrıca Yeni Başlayanlar için C Eğitimimize göz atın: - Buraya Tıkla