08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

}<br />

int main()<br />

{<br />

struct Person *ptr;<br />

ptr = (struct Person *)malloc(sizeof(struct Person));<br />

if (ptr == NULL) {<br />

printf("bellek tahsis edilemiyor!\n");<br />

exit(EXIT_FAILURE);<br />

}<br />

set_person(ptr, "Kaan", "Aslan", 2345, 4.80);<br />

display_person(ptr);<br />

free(ptr);<br />

}<br />

return 0;<br />

main işlevini inceleyin. malloc işleviyle struct Person türünden bir nesnenin sığabileceği<br />

büyüklükte bir bellek alanı dinamik olarak elde ediliyor. Dinamik bloğun başlangıç adresi<br />

struct Person türünden bir gösterici değişken olan ptr'de tutuluyor. set_person isimli<br />

işlevin, dışarıdan adresini aldığı yapı nesnesini, diğer parametrelerine aktarılan bilgilerle<br />

doldurduğunu görüyorsunuz. Daha önce tanımlanan display_person isimli işlev ise, yine<br />

adresini aldığı yapı nesnesinin tuttuğu bilgileri ekrana yazdırıyor. Bu işlevlere, yapı<br />

nesnesinin adresi olarak, elde edilen dinamik bloğun başlangıç adresinin geçildiğini<br />

görüyorsunuz.<br />

Bir Yapı Türünden Adrese Geri Dönen İşlevler<br />

Bir işlevin geri dönüş değeri, bir yapı türünden adres de olabilir. Bu durumda işlevin geri<br />

dönüş değerini içinde tutacak geçici nesne bir yapı türünden adrestir. İşlev çağrısı, işlevin<br />

geri dönüş değeri türünden bir göstericiye atanabilir. Aşağıdaki işlev tanımını inceleyin:<br />

struct Person *create_person(const char *name_ptr, const char<br />

*fname_ptr,int n, double w)<br />

{<br />

struct Person *ptr;<br />

ptr = (struct Person *)malloc(sizeof(struct Person));<br />

if (ptr == NULL) {<br />

printf("bellek elde edilemiyor!\n");<br />

exit(EXIT_FAILURE);<br />

}<br />

set_person(ptr, name_ptr, fname_ptr, n, w);<br />

}<br />

return ptr;<br />

create_person işlevi dinamik olarak yerini ayırdığı bir nesneyi parametrelerine aktarılan<br />

bilgilerle dolduruyor. Daha sonra dinamik nesnenin adresiyle geri dönüyor. Bu işlevi<br />

kullanan bir kod parçası aşağıdaki gibi olabilir:<br />

int main()<br />

{<br />

struct Person *ptr;<br />

ptr = create_person("Kaan", "Aslan", 2345, 4.80);<br />

display_person(ptr);<br />

376

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

Saved successfully!

Ooh no, something went wrong!