Kelime olarak Tükrçe karşılığı yapı anlamına gelen structler tek bir ad altında toplanmış bilgiyi bir arada tutmak için yol sunan bir koleksiyondur.
Yapıyı oluşturan öğelere member adı verilir.Örneği inceleyelim:
struct kisi{
char adi[15];
int yas;
};
struct kisi ahmet;
ahmet.yas=2;
Yukarıdaki şekilde bir yapı tanıtıldı ve bu yapıya ahmet adında bir değişken atandı.Bu değişkenin özellikleri yani yaş v.s gibi özelliklerine ise yani yapı üyelerine ise "."operatörü ile erişebiliriz.ahmet.yas=2; de olduğu gibi.Bu yapı üyelerinin ekrana yazdırılması ise şu şekilde yapılabilir:
printf("%d",ahmet.yas);
Yapılarda onemli bir husuta yapıların atanmasıdır.Aşağıdaki örneğimizi inceleyecek olursak bunu daha net bi şekilde görebiliriz.
strcut num{
int a;
int b;
}x,y ;
x.a=4; x.y=3;
y=x;
printf("%d %d",y.a,y.b);
Programın çıktısı sırası ile 4 ve 3 olacaktır.Bu gibi şekillderde yapıların tüm üyelerini birbirine eşitleyebilirsiniz.Aynı üeyelere sahip birden çok yapı değişkeni tanıtmak istediğinizde ise şu yontemi kullabilirsiniz:
struct kisi ahmet[100]; //Bu şeklilde 100 tane ahmet adında değişken tanımlanmış oldu.
prinyf("%d",ahmet[1].yas);//Bu şekilde ise yapıların üyelerine erişim sağlanabilir.
Bu konuda öenmli bir hususta tüm dizi değişkenleri gibi ,yapılarda 0 dan indexlemey başar.Yani ahmet[0] ile başlar.
10 kisilik bir hasta defteri hazırlanması:
#include
int i,k;
int main(void){
struct hasta{
char adi[];
int hastano;
char bolum[];
};
struct hasta kisi[10];
for(i=0; i<10; i++){
printf("Hastanin adi:");
gets(kisi[i].adi);
printf("\nHasta numarasi:");
scanf("%d",&kisi[i].hastano);
printf("\nHastanin Bolumu:");
gets(kisi[i].bolum;);
printf("\nKayit islemi tamamlandi.\n\n");
}
}
Bu program sadece kayıtları alır ama siz bunu geliştirebilir.Aldığı kayıtları bir dosyaya yazdırdan kayıtları okutan vs.vs olarak ilerletebilirsiniz.Strcutlardaki üyeleri fonksyonlara aktarabiliriz.Bunu nasıl yaparız diyorsanız örneği inceleyelim:
strcut num{
int a;
}lock;
void beninfonksyonum(num.lock);
Kendi fonksyonunuza yapının üyeleri atıyabilirisiniz.Yada bir fonksyona bir yapı içerisindeki tüm üyeleri aktarmak isteyebilirsiniz.Bunu ise şu şekilde yapabiliriz:
#include
struct caps{
int a;
char b[];
};
void f1(struct caps key);
void f1(struct caps key){ /*Oluşturacağımız fonksyonun işlevini belirliyoruz*/
printf("%d",key.a);
}
int main(void){
struct caps num;
num.a=34;
f1(num);
}
Yukarıda yeni bir fonksyon deklare edilmiş.main içerisine ise yeni bir yapı değişkeni tnaıılmış ve bu değişkendeki üyelere değeler verilmiş.Ve f1(num)diyerek num değişkeninin üyelerinin değerinin fonksyon içerisindeki üyelerine eşitlenmesi sağlanmıştır.
Yapıya herzaman değişken yerine işaretçide tanıtılabilir.Mesela bir yapıya pointer tanıtalım:
struct dal{
int a;
}zel;
struct dal *p;/*Bunu pointerler konsunda göreceğiz.Şimdilik bunu bilmeniz yeterli*/
p=&zel;
Bu şekilde bir pointere yapı üyeleri atanmış oldu.Peki pointere atanan bu yapı üyelerine nasıl ulaşırız:
p->a=4;
SIRALAMALAR
Sıralamalar oluşturulurken başlarına enum alırlar.Örn:
enum para{tl,ytl,euro};
enum para lira;
if(lira==ytl)printf("ytl");
Burada para içerisinde tanımlı değişkenlerin hepsine birer değer denk gelmektedir.
printf("%d",tl);
Bu şekilde tl ye "0" değerinin atandığını görürüz.Değerler 0 dan başlayarak 1,2,3,4... gider.Ancak siz sıralama içerisinde tanımlı değişkene bir değer verirseniz durum değişir.Örneği inceleyelim:
enum para{tl,ytl=10,euro};
printf("%d",tl);
printf("%d",ytl);
printf("%d",euro);
programın çıktısı: 1,10,11 olacaktır.Sıralama için deklare ettiğimiz para üzerinde bi kaç önemli nokta hkkında bilgi vermek istiyorum:
para=ytl;
printf("%s",para); //Bu şekilde bir tanımlama hatalı olur.Çünkü %s karakter okutmak için kullanılır.Değer karakter değeri değildir.
para="lira"; // Bu kodda çalışmaz.Structler bu kadar.Hepinize kolay gelsin.






0 Yorum:
Yorum Gönder