25 Temmuz 2013 Perşembe

Yapılar ve Birlikler

  enum Deyimi (Enumeration Constants)
Yapı, struct Deyimi (Structures)
http://www1.gantep.edu.tr/~bingul/c/index.php?ders=15

enum ile sabit bildirimi yapılırken
struct ile değişken bildirimi yapılır




/* 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;
}
 
 
 
struct ile oluşturulan yapıda typedef deyimi kullanılırsa, bu yapıdan değişken tanımlamak için tekrar struct deyiminin kullanılmasına gerek kalmaz.
      typedef struct kayit{
        char  ad[10];
        long  no;
        short sinif;
      } ogr1,ogr2; 
 
typedef başka kullanımı da vardır. C dilinde program kodları bu deyimle tamamen türkçeleştirilebilir. Örneğin bu deyim:
       typedef int tamsayi;
şeklinde kullanılırsa programda daha sonra int tipinde bir değişken tanımlarken şu biçimde kullanılmasına izin verilir.
       tamsayi x,y;   /* int x,y anlaminda */
bu iş define kullanmaya benziyor
 
15.1   Birlik, union Deyimi  
union kullanmak aynı adrese sahip bir değişkene birden fazla isimle ulaşmaktır(mgb)
union degisken{
   int x;
   int y;
}osman;
şeklinde tanımlarız 
osman.x=5; dersek y değişkenide 5 olur çünkü ikisi aslında aynı şey 
sadece farklı isimlerden ulaşıyoruz
örnek:
/* 15prg07.c
   union x ve y nin aynı bellek alanını işgal ettiğinin kanıtı */

#include <stdio.h>

union paylas{
   int x;
   int y;
}z;

int main()
{
   int *xAdres,*yAdres;

   z.x    = 11;
   xAdres = &z.x;
   printf("x = %d   y = %d\n",z.x, z.y);

   z.y    = 22;
   yAdres = &z.y;
   printf("y = %d   y = %d\n",z.x, z.y);

   printf("xAdres = %p   yAdres = %p\n",xAdres, yAdres);

 return 0;
}
çıktı:

x = 11   y = 11
y = 22   y = 22
xAdres = 0x804974c   yAdres = 0x804974c
 
Union, birlik demektir. İçinde tanımladığın veri tiplerinin en büyüğünün
 alanı kadar bir hafıza alanı ayırır. Bu birlikten hangi değişkene 
erişirsen eriş hep aynı alana erişir. Sadece değerlendirmesi gerekir. 
Bir çok veriyi aynı anda kullanmayacaksan hafıza tasarrufu sağlar.
http://forum.ceviz.net/c-c/106831-union-keywordu.html 
 
 
union ve struck hakkında çok güzel bilgiler anlatmış arkadaş: http://emreknlk.blogspot.com/2007/01/struct-ve-union-da-ne-ola-ki.html 
 

Hiç yorum yok:

Yorum Gönder