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

#include <br />

#include <br />

#include <br />

#define SIZE 20<br />

int *getmax(const int *p, int size)<br />

{<br />

int *pmax, i;<br />

}<br />

pmax = (int *)p;<br />

for (i = 1; i < size; ++i)<br />

if (p[i] > *pmax)<br />

pmax = (int *)(p + i);<br />

return pmax;<br />

int main()<br />

{<br />

int a[SIZE];<br />

int k;<br />

srand(time(0));<br />

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

a[k] = rand() % 1000;<br />

printf("%d ", a[k]);<br />

}<br />

printf("\n");<br />

printf("max = %d\n", *getmax(a, SIZE));<br />

}<br />

return 0;<br />

İşlevin kodunu inceleyin. Yerel pmax gösterici değişkeni, dizinin en büyük elemanının<br />

adresini tutmak için tanımlanıyor. Başlangıçta dizinin ilk elemanı en büyük kabul<br />

edildiğinden, pmax göstericisine önce dizinin ilk elemanının adresi atanıyor:<br />

pmax = (int *)p<br />

atamasıyla dışarıdan alınan dizinin başlangıç adresinin pmax isimli göstericiye atandığını<br />

görüyorsunuz. Daha sonra oluşturulan for döngüsüyle sırasıyla dizinin diğer<br />

elemanlarının, pmax göstericisinin gösterdiği nesneden daha büyük olup olmadıkları<br />

sınanıyor. pmax'ın gösterdiği nesneden daha büyük bir dizi elemanı bulunduğunda, bu<br />

elemanın adresi pmax göstericisine atanıyor.<br />

pmax = (int *)(p + i)<br />

atamasında p + i ifadesinin &p[i] ifadesine eşdeğer olduğunu biliyorsunuz.<br />

Döngü çıkışında pmax gösteri değişkeni dizinin en büyük elemanının adresini tutar, değil<br />

mi?<br />

main işlevinde SIZE uzunluğunda bir dizi önce rastgele değerle dolduruluyor. Daha sonra<br />

dizi elemanlarının değerleri ekrana yazdırılıyor.<br />

Aşağıdaki işlev çağrısıyla ekrana getmax işlevinin geri döndürdüğü adresteki nesnenin<br />

değeri yazdırılıyor.<br />

printf("max = %d\n", *getmax(a, SIZE));<br />

Bu da dizinin en büyük elemanının değeridir, değil mi?<br />

254

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

Saved successfully!

Ooh no, something went wrong!