0Pricing
C Academy · Ders

İşlev İşaretçisi Tabloları

Dağıtım örüntüleri

İşlev İşaretçisi Tabloları, CoddyKit'te ücretsiz bir C Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C Academy kursu toplamda 4 dersten oluşur.

İşlev Tabloları

Bir yönlendirme tablosu oluşturmak için işlev işaretçilerini bir dizide saklayabilirsiniz. Bir dizin veya kod, hangi işlevin çalıştırılacağını seçerek uzun if-else veya switch zincirlerinin yerini alır.

#include <stdio.h>

int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }

int main(void) {
    int (*ops[2])(int,int) = { add, sub };
    printf("%d\n", ops[0](5, 3));
    printf("%d\n", ops[1](5, 3));
    return 0;
}

Tabloda Dizinleme

Diziyi dizinleyerek çalışma zamanında bir işlem seçin. Dizin, kullanıcı girdisinden veya program durumundan gelebilir.

#include <stdio.h>

int mul(int a, int b) { return a * b; }
int add(int a, int b) { return a + b; }

int main(void) {
    int (*ops[2])(int,int) = { add, mul };
    int choice = 1;
    printf("%d\n", ops[choice](6, 7));
    return 0;
}

switch Yerine Kullanma

Her durum yalnızca bir işlev çağırıyorsa yönlendirme tablosu genellikle bir switch yapısından daha temizdir.

#include <stdio.h>

void start(void) { printf("start\n"); }
void stop(void)  { printf("stop\n"); }
void pause(void) { printf("pause\n"); }

int main(void) {
    void (*table[3])(void) = { start, stop, pause };
    for (int i = 0; i < 3; i++) table[i]();
    return 0;
}

typedef Tabloyu Sadeleştirir

İşlev işaretçisi türü için typedef kullanmak, tablo bildirimini kısa ve okunabilir hâle getirir.

#include <stdio.h>

typedef int (*BinOp)(int,int);

int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }

int main(void) {
    BinOp ops[] = { add, sub };
    printf("%d\n", ops[0](10, 4));
    return 0;
}

Sembolleri İşlevlerle Eşleme

Adına göre arama yapmak için her işleç sembolünü paralel dizilerde veya bir yapı tablosunda kendi işleviyle eşleştirin.

#include <stdio.h>

typedef int (*BinOp)(int,int);

int add(int a, int b){return a+b;}
int sub(int a, int b){return a-b;}

int main(void) {
    char syms[] = {'+', '-'};
    BinOp ops[] = { add, sub };
    char want = '-';
    for (int i = 0; i < 2; i++)
        if (syms[i] == want) printf("%d\n", ops[i](9, 2));
    return 0;
}

Yapı Tabanlı Komut Tablosu

Bir adı ve işleyiciyi bir yapıda bir araya getirip bunlardan bir dizi oluşturun. Bu, klasik komut tablosu düzenidir.

#include <stdio.h>
#include <string.h>

typedef struct {
    const char *name;
    void (*run)(void);
} Command;

void hello(void){printf("hi\n");}
void bye(void){printf("bye\n");}

int main(void) {
    Command cmds[] = {{"hello", hello}, {"bye", bye}};
    const char *input = "bye";
    for (int i = 0; i < 2; i++)
        if (strcmp(cmds[i].name, input) == 0) cmds[i].run();
    return 0;
}

Sınır Denetimi

Tablo üzerinden çağrı yapmadan önce dizinin dışına taşarak okumayı önlemek için dizini her zaman doğrulayın.

#include <stdio.h>

typedef int (*Fn)(int);
int sq(int x){return x*x;}
int neg(int x){return -x;}

int main(void) {
    Fn table[] = { sq, neg };
    int n = 2;
    int idx = 5;
    if (idx >= 0 && idx < n) printf("%d\n", table[idx](3));
    else printf("index out of range\n");
    return 0;
}

Durum Makineleri

Yönlendirme tabloları durum makinelerini çalıştırır: her durum bir işlev işaretçisidir ve işleyiciler bir sonraki durum dizinini döndürür.

#include <stdio.h>

int state_a(void){ printf("A\n"); return 1; }
int state_b(void){ printf("B\n"); return -1; }

int main(void) {
    int (*states[2])(void) = { state_a, state_b };
    int s = 0;
    while (s >= 0) s = states[s]();
    return 0;
}

Eklenti Benzeri Yönlendirme

İşleyicileri bir tabloya kaydederek, büyük bir switch'i düzenlemek yerine yeni davranışı bir giriş ekleyerek sağlayabilirsiniz.

#include <stdio.h>

typedef void (*Handler)(int);
void log_low(int v){printf("low %d\n", v);}
void log_high(int v){printf("high %d\n", v);}

int main(void) {
    Handler handlers[] = { log_low, log_high };
    int level = 1;
    handlers[level](7);
    return 0;
}

Varsayılan İşleyici

Bilinmeyen kodlar için bir yuva veya yedek işaretçi ayırın; böylece yönlendirme sessizce başarısız olmaz.

#include <stdio.h>

typedef void (*Fn)(void);
void known(void){printf("known\n");}
void fallback(void){printf("unknown command\n");}

int main(void) {
    Fn table[] = { known };
    int n = 1, code = 9;
    Fn f = (code >= 0 && code < n) ? table[code] : fallback;
    f();
    return 0;
}

Tablolar Neden Ölçeklenebilir

Yönlendirme tabloları dallanma mantığını veri aramasına dönüştürür. Durum eklemek veri eklemek anlamına gelir; bu da kodu düz ve hızlı tutar.

#include <stdio.h>

typedef int (*Fn)(int);
int a(int x){return x+1;}
int b(int x){return x*2;}
int c(int x){return x*x;}

int main(void) {
    Fn t[] = { a, b, c };
    for (int i = 0; i < 3; i++) printf("%d ", t[i](4));
    printf("\n");
    return 0;
}

Hızlı Kontrol

İşlev işaretçisi tabloları hakkındaki anlayışınızı sınayın.

Özet

İşlev işaretçisi tablolarıyla yönlendirme düzenlerini öğrendiniz:

  • İşlev işaretçilerini bir dizide saklayın ve dizine göre seçin.
  • Uzun switch zincirlerinin yerini alırlar ve veri eklenerek ölçeklenirler.
  • Anlaşılırlık için typedef ve yapı tabanlı komut tabloları kullanın.
  • Dizini her zaman sınırlar açısından denetleyin ve varsayılan bir işleyici sağlayın.

Sıkça Sorulan Sorular

“İşlev İşaretçisi Tabloları” dersi ücretsiz mi?

Evet — “İşlev İşaretçisi Tabloları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C Academy kursu toplamda 4 dersten oluşur.

“İşlev İşaretçisi Tabloları” dersinde ne öğreneceğim?

Dağıtım örüntüleri C Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“İşlev İşaretçisi Tabloları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İşlev İşaretçileri Tanımlama
  2. İşlevleri Geçirme
  3. Karşılaştırıcılarla qsort
  4. İşlev İşaretçisi Tabloları
← C Academy Sayfasına Dön