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

qsort işlevi ile bir gösterici dizisinin sıralanmasına dikkat edilmelidir.<br />

Aşağıdaki programı inceleyin ve sıralama işleminin neden yapılamadığını anlamaya<br />

çalışınız:<br />

#include <br />

#include <br />

#include <br />

#define SIZE 20<br />

int cmp(const void *vp1, const void *vp2)<br />

{<br />

const char *p1 = (const char *)vp1;<br />

const char *p2 = (const char *)vp2;<br />

}<br />

return strcmp(p1, p2);<br />

int main()<br />

{<br />

char *names[SIZE] = {"Ali", "Veli", "Hasan", "Necati", "Burcu", "Kaan",<br />

"Selami", "Salah", "Nejla", "Huseyin", "Derya", "Funda", "Kemal",<br />

"Burak", "Ozlem", "Deniz", "Nuri","Metin", "Guray", "Anil"};<br />

int k;<br />

qsort(names, SIZE, sizeof(char *), cmp);<br />

for (k = 0; k < SIZE; ++k)<br />

printf("%s ", names[k]);<br />

}<br />

return 0;<br />

Hatayı görebildiniz mi? Karşılaştırma işlemini gerçekleştirecek cmp isimli işlev yanlış<br />

yazılmış. Bu işleve char * türünden iki nesnenin adresi gönderileceğine göre, işlev içinde<br />

yapılan tür dönüştürme işleminde, hedef tür char* türü değil char** türü olmalıydı. (char<br />

*) türünden bir nesnenin adresi olan bilgi (char **) türündendir.<br />

İşlev aşağıdaki gibi yazılmalıydı:<br />

int cmp(const void *vp1, const void *vp2)<br />

{<br />

const char * const *p1 = (const char * const *)vp1;<br />

const char * const *p2 = (const char * const *)vp2;<br />

}<br />

return strcmp(*p1, *p2);<br />

İşlev Göstericisi Dizileri<br />

Elemanları işlev göstericileri olan diziler de tanımlanabilir:<br />

void (*fparray[10])(void);<br />

Yukarıdaki tanımlama ile fparray, her bir elemanı, geri dönüş değeri ve parametre<br />

değişkeni olmayan bir işlevi gösteren 10 elemanlı bir dizidir.<br />

fparray[2]<br />

ifadesiyle bu dizinin üçüncü elemanına ulaşılır ki bu ifadenin türü<br />

515

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

Saved successfully!

Ooh no, something went wrong!