Özet - Fonksiyon işaretçileri
- C kursu
- Orta seviye
- Ders 29/116
- 5 dk
qsort, callback ve dispatch tabloyu birleştirerek bir komut işleyici yazarsın.
Komut işleyici tasarımı
Bu özette qsort, callback ve dispatch table kavramlarını birleştirerek bir komut işleyici yazacaksın. Komut işleyici, komut adına göre ilgili fonksiyonu çağırır.
Yapı şu şekilde: add, sub ve mul fonksiyonlarını tanımlarsın. Bunları bir fonksiyon işaretçi dizisinde toplarsın. Sonra her komut için sırayla çağırıp sonucunu yazdırırsın. Dispatch table sayesinde yeni komut eklemek yalnızca diziye eleman eklemekle kalır; çağırma mantığı değişmez. Bu, gerçek komut satırı uygulamalarının ve yorumlayıcıların temel desenidir.
Uygulama Komut işleyici yaz
int add(int a, int b), int sub(int a, int b) ve int mul(int a, int b) fonksiyonlarını yaz. int (*ops[3])(int, int) = {add, sub, mul}; ile fonksiyon işaretçi dizisi tanımla. printf("%d\n", ops[0](3, 4));, printf("%d\n", ops[1](10, 7)); ve printf("%d\n", ops[2](2, 5)); ile üç komutu çağır ve yazdır.
Başlangıç kodu
#include <stdio.h>
// add, sub, mul fonksiyonlarını yaz
// ops fonksiyon işaretçi dizisi tanımla
// main içinde üç komutu çağır ve yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }
int main(void) {
int (*ops[3])(int, int) = {add, sub, mul};
printf("%d\n", ops[0](3, 4));
printf("%d\n", ops[1](10, 7));
printf("%d\n", ops[2](2, 5));
return 0;
}Beklenen çıktı
7 3 10
Özet
Bu grupta fonksiyon işaretçilerini derinlemesine öğrendin. Tanımını, iki çağırma biçimini, qsort ile kullanımını, callback desenini ve dispatch table'ı gördün.
Bunları birleştirerek bir komut işleyici yazdın. qsort callback, forEach callback ve dispatch table; üçü de fonksiyon işaretçisinin farklı kullanımlarıdır. Bu desenler, gerçek dünya C kodunda yaygındır: olay işleme, sıralama, komut işleme ve yorumlayıcılar. Sonraki gruplarda bu temeller, daha karmaşık veri yapıları ve sistem programlama üzerinde kullanılacak.
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Dispatch table'nın en iyi kullanımı nedir?
- Matematik hesapları
- Bellek ayırma
- Komut işleyiciler Doğru cevap
- Dize birleştirme
Açıklama: Komut işleyiciler dispatch table'nın en iyi kullanımıdır.
2 Kavramları kullanıma eşle
| Kavram | Anlamı |
|---|---|
qsort |
Karşılaştırıcı callback |
forEach |
Eleman callback |
ops[0](...) |
Dispatch çağrı |
int (*fp)(int) |
İşaretçi türü |