08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

#include <br />

struct Sample {<br />

int i;<br />

long l;<br />

double d;<br />

};<br />

int main()<br />

{<br />

struct Sample sam;<br />

printf("%d\n", sizeof(sam));<br />

}<br />

return 0;<br />

Yukarıdaki program UNIX altında çalıştığında ekrana 16 değerini yazdırır. Çünkü struct<br />

Sample türünden bir nesne olan sam nesnesinin bellekte kapladığı yer üç elemanının<br />

kapladığı uzunluğun toplamıdır. Bu aşağıdaki şekilde de ifade edilebilir:<br />

sizeof(sam) == sizeof(int) + sizeof(long) + sizeof(double)<br />

Hizalama (alignment) konusunda yeniden bu noktaya değininilecek.<br />

Yapı Bildirimi İle Değişken Tanımlamasının Birlikte Yapılması<br />

Bir yapı bildirimi sonlandırıcı atom ile sonlandırılmadan, yapı bildiriminin kapanan küme<br />

ayracından hemen sonra bir değişken listesi yazılırsa yapı bildirimi ile değişken<br />

tanımlaması bir arada yapılmış olur.<br />

struct Date {<br />

int day, month, year;<br />

}bdate, edate;<br />

Yukarıdaki deyim ile struct Date türü bildirilirken bu yapı türünden bdate ve edate<br />

değişkenleri de tanımlanıyor. Bu durumda yapı değişkenlerinin bilinirlik alanları yapı<br />

bildiriminin yerleştirildiği yere bağlı olarak belirlenir. Yani söz konusu yapı değişkenleri<br />

yerel ya da global olabilir.<br />

Yapı nesnelerinin hemen yapı bildiriminden sonra tanımlanması durumunda yapı ismi<br />

kullanma zorunluluğu da bulunmaz. Örneğin yukarıdaki bildirim aşağıdaki şekilde de<br />

yapılabilir.<br />

struct {<br />

int day, month, year;<br />

} bdate, edate;<br />

Burada bdate ve edate yukarıda bildirilen ama isimlendirilmeyen yapı türünden<br />

değişkenlerdir. Bu yöntemin dezavantajı artık aynı türden başka bir yapı değişkeninin<br />

tanımlanmasının mümkün olmayışıdır. Örneğin yukarıdaki kod parçasından sonra aynı<br />

yapı türünden bir yapı nesnesi daha tanımlamak istediğimizi düşünelim. Bu tanımlama<br />

struct {<br />

int day, month, year;<br />

}cdate;<br />

biçiminde yapılsa bile artık derleyici, bildirimleri eşdeğer olan bu iki yapı türünü ayrı yapı<br />

türleri olarak ele alır. Dolayısıyla<br />

cdate = bdate;<br />

362

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!