CodeBlanks Logo Icon CodeBlanks

Ö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

main.c
#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

main.c
#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ü

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