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

(*ptr).mem<br />

ptr->mem<br />

Nokta ve ok işleçlerinin her ikisi de elemana erişmek için kullanılır. Ancak nokta işleci yapı<br />

değişkeninin kendisiyle, ok işleci ise adresiyle erişim sağlar.<br />

Yapı Nesnelerinin İşlevlere Geçirilmesi<br />

Bir işlevin değerle (call by value) ya da adresle (call by reference) çağrılabileceğini<br />

biliyorsunuz. Yapı nesneleriyle ilgili bir iş gören işlev de, değerle ya da adresle çağrılabilir.<br />

Yapı Nesnesinin Değerinin İşleve Gönderilmesi<br />

Bir işleve gönderilen argüman olan ifade, işlevin ilgili parametre değişkenine kopyalanır.<br />

Bu durumda bir işlevin parametre değişkeni bir yapı türünden ise, işlev aynı yapı<br />

türünden bir nesne ile çağrılabilir. Aynı türden yapı nesnelerinin atama işleciyle birbirine<br />

atanabileceğini biliyorsunuz. Böyle bir atama blok kopyalaması anlamına geldiği için, hem<br />

bellek hem de işlem zamanı açısından göreli bir kayba neden olur. Üstelik bu yöntemle,<br />

işlev kendisine gönderilen argümanları değiştiremez. Çünkü işlev değerle çağırılmaktadır.<br />

Aşağıdaki örneği inceleyin:<br />

#include <br />

#define MAX_NAME_LEN 16<br />

#define MAX_FNAME_LEN 24<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 display_person(struct Person per)<br />

{<br />

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

}<br />

int main()<br />

{<br />

struct Person person = {"Necati", "ERGIN", 2345, 3.56};<br />

display_person(person);<br />

}<br />

return 0;<br />

display_person işlevinin parametre değişkeni struct Person türünden bir nesnedir. main<br />

işlevi içinde struct Person türünden ismi person olan bir nesnenin ilkdeğer verilerek<br />

tanımlandığını görüyorsunuz. display_person işlevine yapılan çağrıda argüman olarak<br />

person nesnesinin değeri kullanılıyor. İşlev çağrıldığı zaman, yaratılan işlevin parametre<br />

değişkeni olan per nesnesine, main bloğu içindeki person değişkeninin değeri kopyalanır.<br />

Bu bir blok kopyalama işlemidir. sizeof(struct Person) büyüklüğünde bir blok kopyalanır.<br />

per nesnesi person nesnesi ile aynı nesne değildir. per nesnesi değeri person nesnesinin<br />

değerine eşdeğer başka bir nesnedir. display_person işlevi içinde<br />

per.wage = 5.60;<br />

gibi bir atama yapılsaydı, şüphesiz bu atamadan person nesnesi etkilenmemiş olurdu.<br />

373

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

Saved successfully!

Ooh no, something went wrong!