Fonksiyon işaretçisi parametre
- C kursu
- Orta seviye
- Ders 4/116
- 5 dk
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.
Başlangıç kodu
#include <stdio.h>
// double_it ve negate fonksiyonlarını yaz
// apply fonksiyonunu tanımla
// main içinde iki şekilde çağır
int main(void) {
return 0;
}Örnek çözüm
#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;
}Beklenen çıktı
10 -5
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Callback parametresini tamamla
void apply(int x, int (____)(int)) {
printf("%d\n", op(x));
}
void apply(int x, int (*op)(int)) {
printf("%d\n", op(x));
}
Açıklama: (*op) işaretçiyi, (int) parametre listesini tamamlar.
2 Callback parçalarını eşle
| Kavram | Anlamı |
|---|---|
apply |
Çağıran fonksiyon |
op |
İşaretçi parametresi |
op(x) |
Dolaylı çağrı |
square |
Geçilen fonksiyon |
3 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 Doğru cevap
- 5 ve square'u toplar
Açıklama: Apply'a 5 ve square geçilir; apply içinde op(5) square(5) olur.