▃ ▅ ησ ♥ яєѕρєcт ▅ ▃
Süper Üye
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:
int f(int); /* fonksiyon bildirimi */
int (*pf)(int); /* fonksiyon göstericisi bildirimi */
pf = &f; /* f'nin adresini pf'ye ata! */
01:
02:
03:
04:
05:
06:
07:
08:
09:
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
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
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
/* 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
Fonksiyon x = 1.100000 deki degeri = 4.131000
Fonksiyon x = 1.100000 deki turevi = 1.630001
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:
int f(int); /* fonksiyon bildirimi */
int (*pf)(int); /* fonksiyon göstericisi bildirimi */
pf = &f; /* f'nin adresini pf'ye ata! */
Bağlantıları görmek için lütfen
Giriş Yap
Bir fonksiyonun 'adresini' iki yoldan öğrenme01:
02:
03:
04:
05:
06:
07:
08:
09:
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
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
mfy yönteminde f(x) fonksiyonunun (h küçük bir değer olmak üzere) Taylor açılımları söyledir:
f(x+h) = f(x) + h*f'(x) + h2*f''(x)/2! + h3*f'''(x)/3! + ...
f(x-h) = f(x) - h*f'(x) + h2*f''(x)/2! - h2*f'''(x)/3! + ...
-
-----------------------------------------------------------------------
f(x+h) - f(x-h) = 2*h*f'(x) + O(h3)
Burada O(h3)'lü terimler ihmal edilirse birinci türev yaklaşık olarak:
f'(x) = [f(x+h) - f(x-h)]/2h
formülü ile hesaplanır.
Bağlantıları görmek için lütfen
Giriş Yap
Türev alan fonksiyon01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
/* 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
Fonksiyon x = 1.100000 deki degeri = 4.131000
Fonksiyon x = 1.100000 deki turevi = 1.630001
Moderatörün son düzenlenenleri: