CodeBlanks Logo Icon CodeBlanks

Fonksiyon işaretçisi çağırma

  • C kursu
  • Orta seviye
  • Ders 25/116
  • 5 dk

Fonksiyon işaretçisini çağırmayı öğrenirsin.

İki çağırma biçimi

Bir fonksiyon işaretçisini iki şekilde çağırabilirsin: doğrudan fp(arg) veya dolaylı (*fp)(arg). Her ikisi de geçerlidir ve aynı sonucu verir.

Örnek: int (*fp)(int) = negate; tanımladıktan sonra hem fp(7) hem (*fp)(7) çağrısı -7 döndürür. İlk biçim daha yaygın ve kısadır. İkinci biçim, işaretçinin dolaylandığını açıkça gösterir; bazı eski kodlarda tercih edilir. Hangisini kullanacağınız stil tercihidir; modern C'de doğrudan fp(arg) yaygındır.

Ne zaman fonksiyon işaretçisi?

Fonksiyon işaretçisi, çağrılacak davranışı çalışma anında seçmek istediğinde kullanılır. Sabit bir fonksiyon çağrısı için gereksizdir.

Örneğin bir hesap makinesinde kullanıcı 'topla' veya 'çıkar' girebilir; sen bir fonksiyon işaretçisi tutar ve çağırırsın. Veya bir sıralama algoritması, karşılaştırmayı bir fonksiyon işaretçisi üzerinden alır (qsort gibi). Sabit bir fonksiyonu doğrudan çağırmak daha basittir; fonksiyon işaretçisi esneklik gerektiğinde değer kazanır. Bu yüzden gerçek dünya kodlarında ancak belirli desenlerde görülür.

Uygulama İki biçimde de çağır

int negate(int x) fonksiyonunu yaz; -x döndürsün. int (*fp)(int) = negate; ile işaretçi tanımla. printf("%d\n", fp(7)); ve printf("%d\n", (*fp)(7)); ile iki biçimde de çağır.

Başlangıç kodu

main.c
#include <stdio.h>

// negate fonksiyonunu yaz
// fp fonksiyon işaretçisini tanımla
// fp'yi iki şekilde çağır ve yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

int negate(int x) {
    return -x;
}

int main(void) {
    int (*fp)(int) = negate;
    printf("%d\n", fp(7));
    printf("%d\n", (*fp)(7));
    return 0;
}

Beklenen çıktı

-7
-7

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Çağırma biçimlerini eşle

Kavram Anlamı
fp(7) Doğrudan çağrı
(*fp)(7) Dolaylı çağrı
fp = negate Atama
int (*fp)(int) Tür

2 fp(7) ile (*fp)(7) arasındaki ilişki nedir?

  • fp(7) geçersizdir
  • (*fp)(7) geçersizdir
  • Aynı sonucu verirler Doğru cevap
  • Farklı sonucu verirler

Açıklama: İki biçim de fonksiyon işaretçisini çağırır; aynı sonucu verir.

3 Dolaylı çağrıyı tamamla

Soru
int (*fp)(int) = negate;
int r = (____)(7);
Cevap
int (*fp)(int) = negate;
int r = (*fp)(7);

Açıklama: (*fp)(7) dolaylı çağrıdır.

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