15.2 Yapı, struct Deyimi (Structures)
15.2 Yapı, struct Deyimi (Structures)
Aralarında mantıksal bir ilişki bulunan farklı türden bilgiler “yapılar (structures)” içerisinde mantıksal bir bütün olarak ifade edilebilir. Yapılar diziler gibi bellekte sürekli kalır. Bir yapı içerisindeki elemanlara üye (member) denir. Üyelerin herbiri farklı veri tipine sahip olabilir. Bu sayede, kendi tipinizi üretebilirsiniz.
Genel yapı bildirimi:
1 2 3 4 5 |
struct yapı_adı{ tip yapı_değişken_ismi; tip yapı_değişken_ismi; ... }; |
NOT
|
Bir öğrenciye ait bilgileri bir çatı altında aşağıdaki gibi toplanabilir:
1 2 3 4 5 6 7 |
/* kayit veri tipi! */ struct kayit{ /* üyeler */ char ad[10]; long no; short sinif; }; |
Bu tipte bir değişken tanımlama:
1 |
struct kayit ogr1, ogr2; |
şeklinde olabilir. ogr1 değişkeni ile tanımlanan 1. öğrencinin numarasına bir değer atama işlemi:
1 |
ogr1.no = 2012597; |
şeklinde yapılır. Bu deyimin kullanımı Program 15.3, ve 15.4’de gösterilmiştir. Inceleyiniz.
Program 15.3: struct deyiminin kullanımı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
/* 15prg03.c Bir öğrenciye ait bilgilerin struct deyimi ile bir çatı altında toplanması */ #include <stdio.h> /* kayit yapısı */ struct kayit{ char ad[10]; long no; int sinif; }; int main() { struct kayit ogr; /* ogr değişkeni kayit tipinde */ printf("Ogrenci Nosu : "); scanf("%ld",&ogr.no); printf("Ogrenci Adi : "); scanf("%s" , ogr.ad); printf("Ogrenci Sinifi: "); scanf("%d" ,&ogr.sinif); printf("\n*** Girilen bilgiler ***"); printf("\nNo : %ld",ogr.no); printf("\nAdi : %s ",ogr.ad); printf("\nSinifi: %d ",ogr.sinif); return 0; } |
ÇIKTI
1 2 3 4 5 6 7 8 |
Ogrenci Nosu : 948589 Ogrenci Adi : Ahmet Ogrenci Sinifi: 2 *** Girilen bilgiler *** No : 948589 Adi : Ahmet Sinifi: 2 |
Yapılar, diğer değişkenler gibi, fonksiyonlara parametre olarak geçirelilebilir.
Program 15.4: struct deyiminin kullanımı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
/* 15prg04.c Yapıların bir fonksiyona parametere olarak aktarılabilmesi */ #include <stdio.h> struct TARIH{ int gun,ay,yil; }; void goster(struct TARIH x){ printf("Tarih: %02d-%02d-%4d\n", x.gun, x.ay, x.yil); } int main() { struct TARIH n; /* n değişkeni TARIH tipinde */ n.gun = 1; n.ay = 8; n.yil = 2003; goster(n); return 0; } |
ÇIKTI
1 |
Tarih: 01-08-2003 |
Yapılarla da, gösterici tanımlamaları yapılabilir. Ancak, bir yapı gösteren göstericinin, gösterdiği yere yönlendirme operatörü, ->, ile erişilir.
Program 15.5: struct deyiminin kullanımı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
/* 15prg05.c: Bir yapı gösteren gösterici */ #include <stdio.h> struct Meyve{ float agirlik; float fiyat; }; int main() { struct Meyve *muz, elma; float muzTutar, elmaTutar; /* muz Meyve tipinde bir gösterici */ muz->agirlik = 2.50; muz->fiyat = 3.50; muzTutar = muz->fiyat * muz->agirlik; /* elma Meyve tipinde bir değişken */ elma.agirlik = 2.00; elma.fiyat = 1.75; elmaTutar = elma.fiyat * elma.agirlik; printf("Meyve Agırlık Birim Fiyatı TUTAR (TL)\n"); printf("----- ------- ------------ -----------\n"); printf("Muz %7.2f %7.2f %7.2f\n", muz->agirlik, muz->fiyat, muzTutar); printf("Elma %7.2f %7.2f %7.2f\n", elma.agirlik, elma.fiyat, elmaTutar); return 0; } |
ÇIKTI
1 2 3 4 |
Meyve Agırlık Birim Fiyatı TUTAR (TL) ----- ------- ------------ ----------- Muz 2.50 3.50 8.75 Elma 2.00 1.75 3.50 |