Yapı nedir?
Yapı, farklı veri türlerinin mantıksal olarak ilişkili veri öğelerini bir araya getiren C programlama dilinde kullanıcı tanımlı bir veri türüdür.
Tüm yapı öğeleri, bitişik bellek konumlarında saklanır. Yapı tipi değişkeni, tek bir isim altında farklı veri tiplerine sahip birden fazla veri öğesini saklayabilir.
Bu eğitimde şunları öğreneceksiniz:
- Yapı nedir?
- Birlik nedir
- Beyan Yapısının Sözdizimi
- C Programlamada Yapı Örneği
- Bildiren Birliğin Sözdizimi
- C Programlamada Birleşim Örneği
- Yapı Vs. Birlik
- Yapının avantajları
- Birliğin avantajları
- Yapının dezavantajları
- Birliğin dezavantajları
Birlik nedir
Birlik, tıpkı bir yapı gibi, kullanıcı tanımlı bir veri türüdür. Birlik, farklı tür ve boyuttaki 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ı tahsis eder. Farklı türdeki nesnelerin aynı konumu paylaşmasına izin verir.
Beyan Yapısı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 bölümü noktalı virgül (;) ile sonlandırılır.
C Programlamada Yapı Örneği
#includestruct 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) isim (dize), 2) roll_no (tamsayı) ve 3) işaretler (kayan nokta).
Bundan sonra, öğrenci bilgilerini saklamak ve bilgisayar ekranında görüntülemek için bir yapı değişkeni sdt oluşturulur.
Çıktı:
Aşağıdaki bilgileri giriniz:
Öğrenci adını girin: James
Öğrenci rulo numarasını girin: 21
Öğrenci notlarını girin: 67
Girdiğiniz bilgiler:
Öğrenci adı: John
Öğrenci rulo numarası: 21
Öğrenci notları: 67.0
Bildiren Birliğin Sözdizimi
union [name of union]{type member1;type member2;type member3;};
Birlik, "birlik" anahtar sözcüğü ve sendika adı kullanılarak ilan edilir. 1 numara, 2 numara, 3 numara sendikanın bireysel üyeleridir. Gövde bölümü noktalı virgül (;) ile sonlandırılır.
C Programlamada Birleşim Örneği
#includeunion 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 değişken ch, beklenen sonucu yazdırır. Bunun nedeni, birleşik olarak, bellek konumunun tüm üye veri türleri arasında paylaşılmasıdır.
Bu nedenle, değeri şu anda depolanan tek veri üyesi bellek alanını kaplayacaktır. En sonunda ch değişkeninin değeri saklandı, bu nedenle geri kalan değişkenlerin değeri kayboldu.
Yapı Vs. Birlik
Yapı ve birlik arasındaki önemli fark şudur:
Yapısı | Birlik |
Bir yapı tanımlamak için bir struct anahtar sözcüğü kullanabilirsiniz. | Bir birleşimi tanımlamak için bir birleşim anahtar sözcüğü kullanabilirsiniz. |
Yapı içindeki her üyeye benzersiz bir bellek konumu atanır. | Birleşik olarak, bir bellek konumu tüm veri üyeleri tarafından paylaşılır. |
Bir veri üyesinin değerini değiştirmek, yapıdaki diğer veri üyelerini etkilemeyecektir. | Bir veri üyesinin değerini değiştirmek, birleşimdeki diğer veri üyelerinin değerini değiştirecektir. |
Aynı anda birkaç üyeyi başlatmanıza olanak sağlar. | Yalnızca ilk sendika üyesini başlatmanıza olanak sağlar. |
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 bir üye için yer kaplar. |
Bir seferde herhangi bir üyeyi geri alabilirsiniz. | Sendikada bir seferde bir üyeye erişebilirsiniz. |
Esnek diziyi destekler. | Esnek bir diziyi desteklemez. |
Yapının avantajları
Yapıyı kullanmanın avantajları / avantajları şunlardır:
- Yapılar, aynı konuyla ilgili birden fazla veriyi aynı yerde topluyor.
- Ad, soyad vb. Gibi benzer veri türleri ve parametrelerin verilerini toplamak istediğinizde faydalıdır.
- Tek bir isim kullanarak tüm kaydı temsil edebileceğimiz için bakımı çok kolaydır.
- Yapısal olarak, eksiksiz kayıt setini tek bir parametre kullanarak herhangi bir işleve geçirebiliriz.
- Benzer türlerle daha fazla kayıt depolamak için bir yapı dizisi kullanabilirsiniz.
Birliğin avantajları
İşte sendika kullanmanın artıları / faydaları:
- Yapıya göre daha az hafıza kaplar.
- Union kullandığınızda, yalnızca son değişkene doğrudan erişilebilir.
- Birleşim, iki veya daha fazla veri üyesi için aynı hafıza konumunu kullanmanız gerektiğinde kullanılır.
- Yalnızca bir veri üyesinin verilerini tutmanıza olanak tanır.
- Ayrılan alanı, veri üyesinin maksimum boyutuna eşittir.
Yapının dezavantajları
Yapıyı kullanmanın eksileri / sakıncaları şunlardır:
- BT projesinin karmaşıklığı sınırın ötesine geçerse, yönetimi zorlaşır.
- Bir koddaki bir veri yapısının değiştirilmesi, diğer birçok yerde de değişiklik yapılmasını gerektirir. Bu nedenle, değişikliklerin izlenmesi zorlaşır.
- Yapı, tüm veriler için depolama alanı gerektirdiğinden daha yavaştır.
- Yapısal olarak herhangi bir üyeyi bir seferde geri getirebilirken, birlik içinde bir seferde bir üyeye erişebilirsiniz.
- Yapı, iç parametrelerde yazılan her üye için yer kaplarken, birlik iç parametrelerde yazılan en yüksek boyuta sahip bir üye için yer kaplar.
- Yapı esnek diziyi destekler. Union, esnek bir diziyi desteklemez.
Birliğin dezavantajları
İşte sendika kullanmanın eksileri / sakıncaları:
- Aynı anda yalnızca bir sendika üyesi kullanabilirsiniz.
- Tüm birleşim değişkenleri bir seferde farklı değerlerle başlatılamaz veya kullanılamaz.
- Union, tüm üyeleri için ortak bir depolama alanı atar.
ANAHTAR FARKLAR:
- Yapı içindeki her üyeye benzersiz bir bellek konumu atanırken, birleşik bir bellek konumu tüm veri üyeleri tarafından paylaşılır.
- Bir veri üyesinin değerini değiştirmek, yapıdaki diğer veri üyelerini etkilemeyecektir, oysa bir veri üyesinin değerini değiştirmek birleşimdeki 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ısal olarak, herhangi bir üyeyi aynı anda geri getirebilir, diğer yandan sendika içinde, bir seferde bir üyeye erişebilirsiniz.
- Yapı esnek diziyi desteklerken birleşim esnek bir diziyi desteklemez.