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

Ancak istenirse, nesnenin içindeki dizinin herhangi bir elemanına köşeli ayraç işleci ya da<br />

içerik işleci ile ulaşılabilir:<br />

per.name[3]<br />

*(per.name + 3)<br />

ifadelerinin türü char türüdür. Bu ifadeler per nesnesinin içindeki name dizisinin 3 indisli<br />

elemanı olan char türden nesneye karşılık gelir.<br />

struct Person türünden bir dizinin içinde tutulan yazının uzunluğu ne olursa olsun, struct<br />

Person türünün sizeof değeri değişmez. Bazı durumlarda, yapı nesneleri içinde yer alan<br />

diziler, yapı nesnesinin boyutunu gereksiz bir biçimde artırdığı için tercih edilmez.<br />

Bir yapının elemanı neden bir dizi olur? Bu yolla bir yapı nesnesi içinde aynı türden belirli<br />

sayıda değer tutulabilir. Bir öğrenciye ilişkin bilgilerin, bir yapı türü ile modellendiğini<br />

düşünün. Böyle bir yapının içinde, öğrencinin notlarını içinde tutacak int türden bir dizi<br />

yer alabilir. Ancak uygulamalarda en çok görülen durum, yazı bilgilerinin yapı içinde yer<br />

alan char türden diziler içinde tutulmasıdır.<br />

Aynı türden belirli sayıda değerin bir yapı nesnesine bağlı olarak tutulması için, bir başka<br />

yol da yapının bir elemanının bir gösterici olmasıdır.<br />

Yapı Elemanı Olarak Gösterici Değişkenlerin Kullanılması<br />

Yapının bir elemanı herhangi türden bir gösterici olabilir. Aşağıdaki örneği inceleyin:<br />

#include <br />

struct Person {<br />

char *name_ptr;<br />

int no;<br />

};<br />

int main()<br />

{<br />

struct Person per;<br />

per.name_ptr = "Necati Ergin";<br />

per.no = 125;<br />

printf("%s %d\n", per.name_ptr, per.no);<br />

}<br />

return 0;<br />

Yukarıdaki kod parçasında bu kez struct Person türünün bir elemanı char türden bir<br />

gösterici olarak seçiliyor. Bir gösterici kullanılan sistemde 2 ya da 4 byte yer<br />

kaplayacağına göre yukarıdaki struct Person yapısının sizeof değeri UNIX altında 8 byte<br />

olur.<br />

per.name_ptr = "Necati Ergin";<br />

İfadesi ile per nesnesinin name_ptr isimli elemanına "Necati Ergin" dizgesi atanıyor.<br />

Dizgelerin birer adres bilgisi olduğunu, derleyici tarafından char * türünden ifadeler<br />

olarak değerlendirildiklerini biliyorsunuz.<br />

per.name_ptr<br />

char * türden nesne gösteren bir ifadedir. Bu ifade per nesnesi içinde yer alan char<br />

türden gösterici değişkene karşılık gelir.<br />

Bu göstericinin gösterdiği yere yani<br />

368

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

Saved successfully!

Ooh no, something went wrong!