11.7 Fonksiyon Göstericileri
11.7 Fonksiyon Göstericileri
Fonksiyon göstericileri, gösterici (pointer) kavramının gücünü gösterin diğer bir uygulama alanıdır. Dizilerde olduğu gibi, fonksiyon adları da sabit göstericidir.
Fonksiyon betiğinin (kodlarının) bellekte bir adreste tutulduğu şeklinde düşünebiliriz. Fonksiyon göstericisi basit olarak fonksiyon adının saklandığı bellek adresini tutan bir göstericidir.Fonksiyon göstericileri sayesinde fonksiyonlar başka fonksiyonlara parametre olarak aktarılabilmektedir.
Fonksiyon adının bellete yer işgal ettiği şöyle öğrenilebilir:
1 2 3 |
int f(int); /* fonksiyon bildirimi */ int (*pf)(int); /* fonksiyon göstericisi bildirimi */ pf = &f; /* f'nin adresini pf'ye ata! */ |
Program 11.8: Bir fonksiyonun ‘adresini’ iki yoldan öğrenme
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
/* 10prg08.c: Bir fonksiyonun 'adresini' öğrenme */ #include <stdio.h> int f(int n){ int f=1, i; for(i=1; i<n; i++) f*=i; return f; } int main() { int (*pf)(int); pf = &f; printf("Fonksiyonun adresi = %p\n", &f); printf("Fonksiyonun adresi = %p\n", pf); return 0; } |
ÇIKTI
1 2 |
Fonksiyonun adresi = 0x4005b0 Fonksiyonun adresi = 0x4005b0 |
Aşağıdaki ikinci örnekte, bir fonksiyon diğer fonksiyona parametre olarak geçirilmiş ve sayısal türevi hesaplanmıştır. Türev hesaplanırken merkezi fark yaklaşımı (central difference approximation) yöntemi kullanılmıştır.
NOT
|
Program 11.9: Türev alan fonksiyon
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 |
/* 10prg09.c: Fonksiyon Göstericisi ile türev hesabı */ #include <stdio.h> double f(double); double turev( double (*)(double), double); int main() { double x = 1.1; printf("Fonksiyon x = %lf deki degeri = %lf\n", x, f(x)); printf("Fonksiyon x = %lf deki turevi = %lf\n", x, turev(f, x) ); return 0; } // türevi hesaplanacak fonksiyon double f(double x){ return x*x*x - 2*x + 5.; } // sayısal türev alan fonksiyon double turev( double (*fonk)(double x), double x){ double h = 1.0e-3; return (fonk(x+h)-fonk(x-h)) / (2*h); } |
ÇIKTI
1 2 |
Fonksiyon x = 1.100000 deki degeri = 4.131000 Fonksiyon x = 1.100000 deki turevi = 1.630001 |