CodeBlanks Logo Icon CodeBlanks

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

main.c
#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

main.c
#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

Soru
void apply(int x, int (____)(int)) {
    printf("%d\n", op(x));
}
Cevap
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.

Orta seviye bölümündeki tüm dersler