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
#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
#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
int (*fp)(int) = negate;
int r = (____)(7);
int (*fp)(int) = negate;
int r = (*fp)(7);
Açıklama: (*fp)(7) dolaylı çağrıdır.