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

sort_array işlevinde ise, dizinin ardışık iki elemanı doğru sırada değil ise bu elemanlar<br />

takas ediliyor. Önce int türden iki nesnenin değerini takas edecek bir işlev yazalım.<br />

Yazdığımız bu işlevi sort_array işlevi içinde çağıralım:<br />

void swap(int *p1, int *p2)<br />

{<br />

int temp = *p1;<br />

*p1 = *p2;<br />

*p2 = temp;<br />

}<br />

void sort_array(int *ptr, int size)<br />

{<br />

int i, k;<br />

}<br />

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

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

if (ptr[k] > ptr[k + 1])<br />

swap(ptr + k, ptr + k + 1);<br />

sort_array işlevinde<br />

if (ptr[k] > ptr[k + 1])<br />

swap(ptr + k, ptr + k + 1);<br />

deyimine dikkat edin. Bu deyimle, dışarıdan adresi alınan dizinin k indisli elemanı, k + 1<br />

indisli elemanından daha büyükse, dizinin k ve k + 1 indisli elemanı olan nesnelerin<br />

değerleri swap işlevi çağrılarak takas ediliyor. swap işlevine argüman olarak iki nesnenin<br />

de adresi geçiliyor. swap işlevi aşağıdaki gibi de çağrılabilirdi, değil mi?<br />

swap(&ptr[k], &ptr[k + 1]);<br />

Aşağıda bir diziyi ters çeviren reverse_array isimli işlev tanımlanıyor:<br />

void reverse_array(int *ptr, int size)<br />

{<br />

int *pend = ptr + size - 1;<br />

int n = size / 2;<br />

}<br />

while (n--)<br />

swap(ptr++, pend--);<br />

pend gösterici değişkenine dizinin son elemanının başlangıç adresi atanıyor.<br />

while döngüsü dizinin eleman sayısının yarısı kadar dönüyor. Döngünün her turunda,<br />

dizinin baştan n. elemanı ile sondan n. elemanı takas ediliyor. ptr ve pend gösterici<br />

değişkenleri, sonek konumunda olan ++ ve -- işleçlerinin terimi oluyor. Döngünün her<br />

turunda işleçlerin yan etkisi nedeniyle, ptr göstericisi bir sonraki nesneyi gösterirken,<br />

pend göstericisi bir önceki nesneyi gösteriyor.<br />

Geri Dönüş Değeri Adres Türünden Olan İşlevler<br />

Bir işlevin parametre değişkeni bir adres türünden olabildiği gibi, bir işlevin geri dönüş<br />

değeri de bir adres türünden olabilir. Böyle bir işlevin tanımında, işlevin geri dönüş<br />

değerinin türünün yazılacağı yere bir adres türü yazılır.<br />

Örneğin int türden bir nesnenin adresini döndüren func isimli işlev aşağıdaki gibi<br />

tanımlanabilir:<br />

252

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

Saved successfully!

Ooh no, something went wrong!