11.6 Geri Dönüş Değeri Gösterici Olan Fonksiyonlar
11.6 Geri Dönüş Değeri Gösterici Olan Fonksiyonlar
Fonkiyonların geri dönüş değeri bir gösterici olabilir. Bu durumda fonksiyon bir değer değil adres döndürecek demektir.
Program 11.7’da önce bir dizinin indisleri, dizi değerleri ve dizi elemanlarının adresleri ekrana basılır. Daha sonra, maxAdr(); fonksiyonu ile dizinin en büyük elemanının adresi döndürülür.Bu örnek progam, göstericilerin gücünü çok zarif bir biçimde bize sunmaktadır. Lütfen inceleyiniz.
Program 11.7: Bir dizinin en büyük elemanının adresini öğrenmek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
/* 10prg07.c: geri donus degeri gosterici olan fonksiyon */ #include <stdio.h> double* maxAdr(double a[], int boyut){ double ebd = a[0]; double *eba = &a[0]; int i; for(i=1; i<boyut; i++){ if(a[i]>ebd){ ebd = a[i]; // en büyük deger eba = &a[i]; // en büyük adres } } return eba; } int main() { double x[6] = {1.1, 3.3, 7.1, 5.4, 0.2, -1.5}; double *p; int k; // indis, dizi ve adresini ekrana bas for(k=0; k<6; k++){ printf("%d %lf %p\n", k, x[k], &x[k]); } p = maxAdr(x,6); printf("En büyük deger: %lf\n", *p); printf("En büyük adres: %p \n", p); printf("En büyük konum: %d \n", int(p-&x[0])); return 0; } |
Dizi elemanları 21. satırda belirlenir. Bu dizinin indisleri, değerleri ve adresleri 26. satırda ekrana basılmıştır. En büyük elemanın adresi 29. satırdaki p = maxAdr(a,6); ile p göstericisine atanmıştır. 5. satırda bildirilen maxAdr(); fonksiyonu, en büyük elemanın adresini hesaplayıp çağrılan yere gönderir. Burada dikkat edilmesi gereken husus, fonksiyonun dönüş değerinin yerel eba göstericisi olmasıdır. eba göstericisi 12. satırda hesaplanan ve fonksiyon parametersi olan dizinin en büyük elemanın adresini tutmaktadır. Son olarak, fonksiyon çağırıldıktan sonra, p göstericisin gösterdiği değer, tuttuğu adres ve dizinin birinci elemanına göre konumu (indisi) ekrana basılmıştır. Indis hesabı int(p-&x[0]) işlemi ile yapılabilir. Bu aslında, pgöstericisin tuttuğu adres ile dizinin ilk elemanının adresi arasındaki farktır. Sonuç yine bir adres olduğu için tamsayı değer elde etmek için int() takısı kullanılmıştır. Netice itibarıyla bir fonksiyon ile üç şey aynı anda öğrenilmiş olur.
ÇIKTI
1 2 3 4 5 6 7 8 9 10 |
0 1.100000 0x7fff41b29ec0 1 3.300000 0x7fff41b29ec8 2 7.100000 0x7fff41b29ed0 3 5.400000 0x7fff41b29ed8 4 0.200000 0x7fff41b29ee0 5 -1.500000 0x7fff41b29ee8 En büyük deger: 7.100000 En büyük adres: 0x7fff41b29ed0 En büyük konum: 2 |