typedef ve fonksiyon işaretçisi
- C kursu
- Orta seviye
- Ders 107/116
- 5 dk
typedef ile fonksiyon işaretçisi türü öğrenirsin.
typedef ve fonksiyon işaretçisi
Fonksiyon işaretçisi sözdizimi uzundur ve okunması zordur. typedef ile kısa ve anlamlı bir ad vererek bu sorunu çözersin.
Örnek: typedef int (*BinOp)(int, int);. Bu, iki int alıp int döndüren fonksiyon işaretçisine BinOp adını verir. Bundan sonra BinOp op = add; yazabilirsin; int (*op)(int, int) = add; yazmaktan çok daha okunaklıdır. typedef fonksiyon işaretçisi ile birlikte, dispatch table ve callback gibi desenleri temiz biçimde ifade etmenin standart yoludur. Tür adı amacı yansıtır; kod kendini belgeler.
BinOp kullanımı
BinOp türünü tanımladıktan sonra, uyumlu imzaya sahip herhangi bir fonksiyonu atayabilirsin. Çağrı doğrudan op(a, b) biçiminde yapılır.
Örnek: int add(int a, int b) { return a + b; } tanımla. Sonra BinOp op = add; ile işaretçiye ata. printf("%d\n", op(3, 4)); ile çağır; sonuç 7 olur. İşaretçi, fonksiyonun adresini tutar; çağrı doğrudan yapılır. Bu, çalışma anında hangi fonksiyonun çağrılacağını seçmenin temiz yoludur. Aynı BinOp türü toplama, çıkarma, çarpma gibi her işlemi temsil edebilir.
Uygulama typedef fp programı yaz
typedef int (*BinOp)(int, int); tanımla. int add(int a, int b) fonksiyonunu yaz; a + b döndürsün. main içinde BinOp op = add; ata. printf("%d\n", op(3, 4)); ile çağır.
Başlangıç kodu
#include <stdio.h>
// BinOp türünü typedef ile tanımla
// add fonksiyonunu yaz
// main'de op işaretçisine add ata ve çağır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
typedef int (*BinOp)(int, int);
int add(int a, int b) {
return a + b;
}
int main(void) {
BinOp op = add;
printf("%d\n", op(3, 4));
return 0;
}Beklenen çıktı
7
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 typedef fp parçalarını eşle
| Kavram | Anlamı |
|---|---|
typedef |
Ad verme |
(*BinOp) |
İşaretçi adı |
(int, int) |
Parametre listesi |
int |
Dönüş türü |
2 BinOp op = add; ataması ne zaman geçerlidir?
- add iki int alıp int döndürdüğünde Doğru cevap
- add parametre aldığında
- add main içinde tanımlandığında
- add static olarak tanımlandığında
Açıklama: BinOp türü iki int alıp int döndürür; add de bu imzaya uymalıdır.
3 BinOp atamasını tamamla
BinOp op = ____;
BinOp op = add;
Açıklama: BinOp op = add; ile fonksiyon işaretçisine add atanır.