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

void func()<br />

{<br />

int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};<br />

void *vptr = a;<br />

void *p;<br />

p = vptr + 2; /* Geçersiz */<br />

++vptr; /* Geçersiz */<br />

--vptr; /* Geçersiz */<br />

vptr += 2; /* Geçersiz */<br />

vptr -= 3; /* Geçersiz */<br />

}<br />

iii) Benzer şekilde, void türden iki adres birbirinden çıkartılamaz. Diğer türden adresler<br />

için, aynı blok içindeki iki nesneye ilişkin iki adresin birbirinden çıkartılması tamamen<br />

geçerlidir. Böyle bir ifadenin değeri iki adres arasındaki nesne sayısına denk bir tamsayı<br />

oldugunu hatırlayın.<br />

void func()<br />

{<br />

void *p1, *p2;<br />

int k;<br />

/***/<br />

k = p1 - p2; /* Geçersiz */<br />

}<br />

void gösterici değişkenleri adreslerin yalnızca sayısal bileşenlerini saklamak amacıyla<br />

kullanılırlar. Diğer tür göstericiler arasındaki atama işlemlerinde uyarı ya da hata<br />

oluşturmadıklarından dolayı, türden bağımsız adres işlemlerinin yapıldığı işlevlerde<br />

parametre değişkeni biçiminde de bulunabilirler. Örneğin:<br />

void func(void *p);<br />

func isimli işlevin parametre değişkeni void türden bir gösterici olduğundan bu işleve<br />

argüman olarak herhangi bir türden bir adres bilgisi gönderilebilir. Yani func işlevi<br />

herhangi bir nesnenin adresi ile çağrılabilir. Bu durumda derleme zamanında bir hata<br />

oluşmadığı gibi, derleyiciden bir uyarı iletisi de alınmaz.<br />

func işlevi, aldığı adresteki nesnenin türüne bağlı bir işlem yapmaz.<br />

C dilinde işlevler void türden adreslere de geri dönebilir. void türden adreslerin herhangi<br />

bir türden gösterici değişkene atanması geçerlidir<br />

void *func(void);<br />

int main()<br />

{<br />

int *p;<br />

char *str;<br />

p = func(); /* Geçerli */<br />

/***/<br />

str = func(); /* Geçerli */<br />

}<br />

return 0;<br />

Parametre Değişkeni void Gösterici Olan Standart C İşlevleri<br />

Standart kütüphanede başı mem harfleri ile başlayan biçiminde bir grup işlev vardır. Bu<br />

işlevler türden bağımsız olarak bellek bloklarıyla ilgili genel işlemler yapar.<br />

284

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

Saved successfully!

Ooh no, something went wrong!