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

}<br />

ptr[counter - 1] = grade;<br />

if (counter == 0) {<br />

printf("hiçbir not girişi yapmadınız!..\n");<br />

return 0;<br />

}<br />

printf("toplam %d tane not girdiniz\n", counter);<br />

printf("girdi§iniz notlar aşağıda listeleniyor :\n");<br />

display_array(ptr, counter);<br />

printf("\nen buyuk not : %d\n", get_max(ptr, counter));<br />

printf("en küçük not : %d\n", get_min(ptr, counter));<br />

printf("notların ortalaması : %lf\n", get_ave(ptr, counter));<br />

printf("notların standart sapması . %lf\n", get_stddev(ptr, counter));<br />

free(ptr);<br />

}<br />

return 0;<br />

Yukarıdaki programda:<br />

ptr = (int *) realloc(ptr, sizeof(int) * counter);<br />

deyiminde, döngünün ilk turunda ptr göstericisinin değeri NULL olduğu için realloc işlevi<br />

malloc gibi davranacak ve int türden 1 adet nesnelik yer ayırır. Ancak döngünün daha<br />

sonraki turlarında realloc işlevine gönderilen adres NULL adresi olmayacağından, daha<br />

önce elde edilen blok döngü içinde sürekli olarak büyütülmüş olur.<br />

Eğer realloc işlevine gönderilen ikinci argüman 0 olursa, realloc işlevi tamamen free işlevi<br />

gibi davranır:<br />

realloc(ptr, 0);<br />

ile<br />

free(ptr);<br />

tamamen aynı anlamdadır. Buna neden gerek görülmüştür? Yani neden<br />

free(ptr)<br />

gibi bir çağrı yapmak yerine<br />

realloc(ptr, 0)<br />

şeklinde bir tercih edilsin?<br />

Dinamik Olarak Elde Edilen Alanın Başlangıç Adresine Geri Dönen<br />

İşlevler<br />

Dinamik olarak ayrılan bir blok, free işleviyle serbest bırakılarak sisteme geri verilene<br />

kadar güvenli olarak kullanılabileceğine göre, bir işlev böyle bir bloğun başlangıç adresine<br />

geri dönebilir.<br />

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

336

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

Saved successfully!

Ooh no, something went wrong!