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 />

}<br />

a = make_point(3, 5);<br />

/***/<br />

return 0;<br />

struct Point make_point(double x, double y)<br />

{<br />

struct Point temp;<br />

}<br />

temp.m_x = x;<br />

temp.m_y = y;<br />

return temp;<br />

İşlevlerin geri dönüş değerlerini geçici bir nesne yardımıyla dışarıya ilettiklerini<br />

biliyorsunuz. Geri dönüş değeri üreten bir işlev içinde kullanılan return ifadesi, işlevin geri<br />

dönüş değerini içinde tutacak geçici bir nesneye atanır. İşlev çağrı ifadesi de bu geçici<br />

nesnenin değerini temsil eder. Bu geçici nesne, işlevin kodunun çalışması return deyimine<br />

gelince yaratılır, işlev çağrısının yer aldığı ifadenin değerlendirilmesi bitince yok edilir. Bir<br />

işlevin geri dönüş değerinin türü, işlevin geri dönüş değerini içinde taşıyacak geçici<br />

nesnenin türüdür.<br />

Yukarıdaki kod parçasında make_point işlevinin geri dönüş değeri, struct Point<br />

türündendir. Bu durumda işlevin geri dönüş değerinin aktarıldığı geçici nesne de struct<br />

Point türünden olur. Böyle bir işlevin geri dönüş değeri, aynı türden bir yapı değişkenine<br />

atanabilir.<br />

Ancak böyle işlevler bellekte çok fazla bir yer kaplamayan küçük yapı nesneleri için<br />

kullanılmalıdır. Çünkü return ifadesiyle geçici bölgeye geçici bölgeden de geri dönüş<br />

değerinin saklanacağı değişkene atamalar yapılır. Bu da kötü bir teknik olmaya adaydır.<br />

Küçük yapılar için tercih edilebilir. Çünkü algısal karmaşıklığı daha azdır.<br />

Yapı Türünden Bir Alanın Dinamik Olarak Elde Edilmesi<br />

Nasıl bir dizi için bellek alanı dinamik olarak elde edilebiliyorsa bir yapı nesnesi için de<br />

dinamik bir bellek bloğu elde edilebilir. Aşağıdaki örneği derleyerek çalıştırın:<br />

#include <br />

#include <br />

#include <br />

#define MAX_NAME_LEN 15<br />

#define MAX_FNAME_LEN 23<br />

struct Person {<br />

char name[MAX_NAME_LEN + 1];<br />

char fname[MAX_FNAME_LEN + 1];<br />

int no;<br />

double wage;<br />

};<br />

void set_person(struct Person *ptr, const char *name_ptr, const char<br />

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

{<br />

strcpy(ptr->name, name_ptr);<br />

strcpy(ptr->fname, fname_ptr);<br />

ptr->no = n;<br />

ptr->wage = w;<br />

}<br />

void display_person(const struct Person *ptr)<br />

{<br />

printf("%d %s %s %.2lf\n", ptr->no, ptr->name, ptr->fname, ptr->wage);<br />

375

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

Saved successfully!

Ooh no, something went wrong!