Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
0 oy
162 gösterim
Struc basit anlamda duydum, okudum da fakat aklımda kullanımı anlamında bir yer bulamadım. Ne olduğunu, nasıl kullanıldığını, ve nerelerde kullanılabileceğini açıklayabilir misiniz?
C/C++ kategorisinde (1.7k puan) sordu
yeniden kategorilendirildi

1 cevap

0 oy

Başlarda anlaması zor olan bir konu, ama aşina olduktan sonra da hemen herşeyi bağladığın bir yapı :)

Struct kelime olarak yapı anlamına geliyor.
Temel kelime anlamı üzerinden anlatmamız gerekirse; değişken tanımlarken yapısı gereği değişken değer olarak tek bir tip bilgiyi tutmak için kullanılıyor. Elimizde integer varsa değişken tipi int oluyor. Char varsa char, ya da bir string varsa dile göre string veya char dizisi olarak tutuyoruz. Temel olarak bakarsak değişkenin tipi neyse o şekilde tutuyoruz. Soru şurada başlıyor, elimizde birden fazla değişken tipi ile tutulması gereken bir yapı varsa ne yapacağız? Mesela bir insanın yaşını, adını, soyadını tutacağımızı farz edelim, bu bilgileri nasıl hafızada tutarız?

Cevap: yaş, ad, soyad diye 3 tane değişken alır bunlara değerleri atabiliriz. Bu bir çözümdür, sıkıntı da çıkmaz. 

Bu çözümden başka bir soru çıkarabiliriz. Mesela birden fazla insan varsa elimizde bunu nasıl tutarız?

İkinci soruya cevap: Normal bilgi birikimimizle pekâlâ birden fazla olan değişkenlerimizi çoğaltabiliriz veya bir dizi içine atabiliriz. Mesela yaş[], ad[], soyad[] şeklinde dizilerimiz olur, hepsinin index bilgisi üzerinden bağlayabiliriz. yas[0] - ad[0] - soyad[0] dediğimiz zaman birinci kişinin bilgilerini almış oluruz. Bu da bir çözümdür. Normalde iş de görür. 

Burdan sonra başka sorular türüyor. ad dediğimiz değişken kişi adı olarak kullanıyoruz, mesela bir de okulumuz olsun onun da ad, kuruluştarihi bilgileri olsun şimdi nasıl yaparız?

Üçüncü soruya cevap: değişkenlerinin isimlerini değiştirebiliriz, kisiadi, okuladi gibi. Bu da bir çözüm. 

Şimdi basit anlamda bakarsak hiç struct kullanmadan bu soruna bir çözüm ürettik, aslında hiç kullanmadan üretebiliriz de :) peki neden kullanacağız?

Dördüncü soruya cevap: Daha güzel okunabilir bir kod yazabilmek için. Aslında konuya yeni giren insanlar için mantıksız gerebilir. Zaten ben bir şekilde hallediyorum neden kullanıyım diye düşünebilir. Unutmamamız gereken; kod bir kere yazılır en az 20 kere okunur. Her seferinde değişkenlerin içinde boğuluruz.

Nasıl daha güzel yazabiliriz?

struct kisi {
  char ad[20];
  char soyad[20];
  int yas;
}

struct okul {
  char ad[50];
  char tarih[15];
}

int main () {
  struct kisi kisi1;
  strcpy(kisi1.ad, "kenan");
  strcpy(kisi1.soyad, "erarslan");
  kisi1.yas = 33;
  printf("%s - %s - %d", kisi1.ad, kisi1.soyad, kisi1.yas);

  struct okul ok;
  strcpy(ok.ad, "GOP univ");
  strcpy(ok.tarih, "20 sene öncesi :)");
  printf("%s - %s", ok.ad, ok.tarih)
  return 0;
}

Bu koda baktığımız zaman, kişi ile alakalı bilgileri tuttuğumuz değişkenleri mantıksal bir gruplamaya koyduk. Yani kisi.ad bizim kişinin adı bilgisine ulaşabilmemize olanak sağlıyor. Okul için ise ok.ad diyerek bilgimizi ayrıştırabiliyoruz. Daha kolay bir yazım sağlıyor. Ayrıca bir struct'un dizisini de yapabiliyoruz. Yani struct kisi kisiler[10] diyebiliriz. O zaman da kisiler[5].ad diyerek beşinci kişinin ad bilgisine ulaşabiliriz. 

OOP konularına hakimsek, aslında class'a benzerliği vardır. Her bir struct hafızada bir bölümü alır. Farkı; çok basit kalması ve C/C++ dillerinin verdiği bu structu hafızanın hangi alanlarında tutulabileceğine karar verme yeteneği(buna şimdilik çok takılma). Sadece verinin tutulması için kullanılır, üzerinde kalıtlama, fonksiyon barındırma, çok biçimlilik gibi özellikleri yoktur. Tabi ben süper C yazıyorum onların bir yolunu bulurum diyen arkadaşlar farklı yollarla o işlemlere benzer şeyler yapabilir. Genel anlamda basit bir obje olarak düşünebiliriz.

Daha faydaları var tabi, dinamik hafıza yönetimi yaparken de bir struct'un büyüklüğü kadar alan ayırabiliriz. 

Bu konuyu çok detaylandırmak istemiyorum. Detaylı sorular olursa ona yönelik açıklamalar yapabiliriz. 

İyi çalışmalar.

(3.3k puan) cevapladı
düzenledi

İlgili sorular

0 oy
2 cevap 442 gösterim
442 gösterim 27 Aralık 2016 Java kategorisinde kenan (3.3k puan) sordu
0 oy
1 cevap 55 gösterim
55 gösterim 27 Ekim 2016 Genel Kavramlar kategorisinde kenan (3.3k puan) sordu
0 oy
1 cevap 39 gösterim
39 gösterim 27 Temmuz 2016 Genel Kavramlar kategorisinde kenan (3.3k puan) sordu
0 oy
1 cevap 216 gösterim
216 gösterim 22 Şubat 2016 Genel Kavramlar kategorisinde kenan (3.3k puan) sordu
+3 oy
2 cevap 826 gösterim
826 gösterim 16 Aralık 2015 Genel Kavramlar kategorisinde tolga (1.7k puan) sordu
...