C
Fonksiyon işaretçisi parametre
Fonksiyona fonksiyon işaretçisi geçmeyi öğrenirsin.
Fonksiyona işaretçi geçirme
Bir fonksiyon, parametre olarak başka bir fonksiyonun işaretçisini alabilir. Bu sayede çağıran taraf, çağrılacak davranışı seçer. Yazım: void apply(int x, int (*op)(int)).
Örnek: apply(5, square) veya apply(5, negate) çağrıları, apply içindeki op(x) satırının farklı fonksiyonları çağırmasını sağlar. Bu desen, standart kütüphanedeki qsort gibi fonksiyonların temelidir: sıralama algoritması sabittir, karşılaştırmayı çağıran sağlar. Buna callback denir; ileride qsort dersinde ayrıntılı göreceksin.
Aynı fonksiyon, farklı davranış
Fonksiyon işaretçisi parametresi, aynı fonksiyonu farklı davranışlarla çağırmanı sağlar. apply fonksiyonu sabit kalır; sen yalnızca ikinci argümanı değiştirirsin.
Örneğin int double_it(int x) ve int negate(int x) fonksiyonlarını yazarsın. apply(5, double_it) 10 yazdırır; apply(5, negate) -5 yazdırır. apply'ın içi hiç değişmez. Bu, kod tekrarını azaltır ve yeni davranış eklemeyi kolaylaştırır: yeni bir fonksiyon yazıp geçirmen yeter.
Uygulama Callback ile iki işlem uygula
int double_it(int x) ve int negate(int x) fonksiyonlarını yaz (sırasıyla x * 2 ve -x döndürsünler). void apply(int x, int (*op)(int)) fonksiyonu tanımla; içinde op(x) çağrısının sonucunu printf ile yazdır. main içinde apply(5, double_it) ve apply(5, negate) çağrılarını yap.
Örnek çözümü göster
#include <stdio.h>
int double_it(int x) { return x * 2; }
int negate(int x) { return -x; }
void apply(int x, int (*op)(int)) {
printf("%d\n", op(x));
}
int main(void) {
apply(5, double_it);
apply(5, negate);
return 0;
}
Kendini test et
-
Callback parametresini tamamla
void apply(int x, int (____)(int)) {
printf("%d\n", op(x));
}
Cevabı göster
void apply(int x, int (*op)(int)) {
printf("%d\n", op(x));
}
-
Callback parçalarını eşle
- apply
- Çağıran fonksiyon
- op
- İşaretçi parametresi
- op(x)
- Dolaylı çağrı
- square
- Geçilen fonksiyon
-
apply(5, square) çağrısı ne yapar?
- square'u 5 ile çağırır
- apply'a 5 ve square'u geçer, op(5) square(5) olur
- apply ve square'u birleştirir
- 5 ve square'u toplar
Cevabı göster
apply ve square'u birleştirir — Apply'a 5 ve square geçilir; apply içinde op(5) square(5) olur.
Sıradaki ders: void işaretçi