Fonksiyon işaretçisi
- C kursu
- Orta seviye
- Ders 3/116
- 5 dk
Fonksiyon işaretçisi tanımlamayı ve çağırmayı öğrenirsin.
Fonksiyon işaretçisi nedir?
Bir fonksiyon işaretçisi (function pointer), bir fonksiyonun adresini tutan değişkendir. C'de int (*fp)(int); yazımı, int döndüren ve bir int alan bir fonksiyona işaretçi bildirir.
Örnek: int square(int x) { return x * x; } ve int (*fp)(int) = square;. Burada fp, square'ün adresini tutar. Çağırmak için fp(5) veya (*fp)(5) yazılır; her ikisi de 25 döndürür. Fonksiyon işaretçisi, çağrılacak fonksiyonu çalışma anında seçmeyi sağlar.
Fonksiyon işaretçisini çağırma
Bir fonksiyon işaretçisini iki şekilde çağırabilirsin: fp(arg) veya (*fp)(arg). İkisi de geçerlidir ve aynı sonucu verir.
İlk yazım daha yaygındır; ikinciyi ise işaretçinin dolaylandığını açıkça göstermek için kullanırsın. Önemli olan, işaretçinin bildirimi ile fonksiyonun imzasının birebir uyuşmasıdır. Dönüş türü ve parametre listesi farklıysa davranış tanımsızdır. Bu yüzden fonksiyon işaretçisi türleri uzun olsa da tam yazılmalıdır.
Uygulama Fonksiyon işaretçisiyle kare al
int square(int x) adında bir fonksiyon yaz; x * x döndürsün. int (*fp)(int) türünde bir işaretçi tanımla ve square'e ata. fp(7) çağrısının sonucunu printf ile yazdır.
Başlangıç kodu
#include <stdio.h>
// square fonksiyonunu yaz
// fp işaretçisini tanımla ve square'ye ata
// fp çağrısının sonucunu yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
int square(int x) {
return x * x;
}
int main(void) {
int (*fp)(int) = square;
printf("%d\n", fp(7));
return 0;
}Beklenen çıktı
49
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangisi int döndüren ve int alan fonksiyona işaretçidir?
- int (*fp)(int);
- int *fp(int); Doğru cevap
- int fp*(int);
- (int *)fp(int);
Açıklama: Int (*fp)(int); — parantezler fp'yi işaretçi yapar.
2 Fonksiyon işaretçisi bölümlerini eşle
| Kavram | Anlamı |
|---|---|
int |
Dönüş türü |
(*fp) |
İşaretçi değişkeni |
(int) |
Parametre listesi |
fp(5) |
Çağrı |
3 Fonksiyon işaretçisini çağır
int square(int x) { return x * x; }
int (*fp)(int) = square;
int r = ____(5);
int square(int x) { return x * x; }
int (*fp)(int) = square;
int r = fp(5);
Açıklama: fp doğrudan fonksiyon gibi çağrılabilir.