C Programlama Dili/Yapılar

Yapılar (struct) birden fazla farklı tipte olabilecek değişkeni bir arada paketlemek için kullanılan yapılardır. Bir yapı programın belirli bir yerinde bir kere tanımlandıktan sonra programın diğer yerlerinde temel veri türleri gibi kullanılabilir. Bir fonksiyon parametre olarak bir yapı türü alabilir, geriye bir yapı türü döndürebilir, bir yapı türünden değişken tanımlanabilir, her bir elemanı bir yapı türünden olan diziler tanımlanabilir. Yapının üyelerine erişmek için . (nokta) operatörü kullanılır. Bir yapı şöyle tanımlanır:

struct yapi {
    char ad[15];
    int yas;
}a, b;

Burada a ve b yapı türünden birer değişkenlerdir. Bu değişkenler programımız içinde kullanılabilir. Bunlara ilaveten yeni değişkenler tanımlanabilir. İstenirse a ve b değişkenleri oluşturulmayabilir. Bu durumda elimizde önceden oluşturulmuş herhangi bir değişken olmayacaktır. Bu yapının programımız içinde kullanımı şöyledir:

struct yapi y;
y.yas=33;
printf("%d",y.yas); //33 çıktısını verir.

Bir yapının bellekte ne kadar yer işgal ettiği sizeof() operatörüyle bulunabilir. Örnek:

printf("%d",sizeof(struct yapi));

sizeof() operatörüne direkt tip adı verilebileceği gibi bir tipin değişkeni de verilebilir. Örnek:

struct yapi y;
printf("%d",sizeof(y));

sizeof() operatörü temel veri tipleriyle de kullanılabilir. Örnek:

printf("%d",sizeof(int));

Bir yapı değişik şekillerde de tanımlanabilir. Örnek:

typedef struct insan {
    char ad[30];
    int yas, kilo, boy;
} kisi;

Burada yapının adı insan değil, kisi'dir. Dolayısıyla yapı değişkeni tanımlanırken insan değil kisi adı kullanılır. Tipi yapı olan bir değişkene gerek programımız içinde gerekse de yapı tanımlaması yaoılırken ilk değer atanabilir. Örnek:

struct koordinat {
    int x, int y, int z;
} bir = {0, 0, 0};
int main() {
    struct koordinat iki = {1, 5, 4};
}

Bu değer atamalarında yapının üyelerine tanımlandıkları sırada değer ataması yapılır. Eğer atanan değer sayısı yapının üye sayısından azsa kalan üyelere 0 atanır. Bir yapının adı olmak zorunda değildir. Bu durumda programımızda yalnızca yapıyı tanımlarken kullanılan değişkenler kullanılabilir. Örnek:

struct {
    char ad[15];
    int yas;
} a, b;

int main() {
    a.yas = 33;
    printf("%d", a.yas);
}