0Pricing
C Academy · Pelajaran

Tabel Pointer Fungsi

Pola dispatch.

Tabel Pointer Fungsi adalah pelajaran C Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C Academy mencakup 4 pelajaran total.

Tabel Fungsi

Anda dapat menyimpan pointer fungsi dalam array untuk membuat tabel pengiriman. Indeks atau kode memilih fungsi yang akan dijalankan sehingga rangkaian if-else atau switch yang panjang dapat digantikan.

#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;
}

Mengindeks Tabel

Pilih operasi saat program berjalan dengan mengindeks array. Indeks tersebut dapat berasal dari masukan pengguna atau keadaan program.

#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;
}

Menggantikan switch

Tabel pengiriman sering lebih rapi daripada switch jika setiap kasus hanya memanggil sebuah fungsi.

#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 Merapikan Tabel

Menggunakan typedef untuk tipe pointer fungsi membuat deklarasi tabel menjadi singkat dan mudah dibaca.

#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;
}

Memetakan Simbol ke Fungsi

Pasangkan setiap simbol operator dengan fungsinya dalam array paralel atau tabel struktur agar dapat dicari berdasarkan nama.

#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;
}

Tabel Perintah Berbasis Struktur

Gabungkan nama dan penangan dalam sebuah struktur, lalu buat array yang berisi struktur tersebut. Ini adalah pola tabel perintah klasik.

#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;
}

Pemeriksaan Batas

Selalu validasi indeks sebelum memanggil fungsi melalui tabel agar tidak membaca melewati akhir array.

#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;
}

Mesin Keadaan

Tabel pengiriman menggerakkan mesin keadaan: setiap keadaan adalah pointer fungsi, dan penangan mengembalikan indeks keadaan berikutnya.

#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;
}

Pengiriman Mirip Plugin

Dengan mendaftarkan penangan dalam tabel, perilaku baru dapat ditambahkan dengan menambahkan entri, bukan dengan mengubah switch besar.

#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;
}

Penangan Bawaan

Sediakan satu slot atau pointer cadangan untuk kode yang tidak dikenal agar pengiriman tidak gagal tanpa pemberitahuan.

#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;
}

Mengapa Tabel Dapat Berkembang

Tabel pengiriman mengubah logika percabangan menjadi pencarian data. Menambahkan kasus berarti menambahkan data, sehingga kode tetap datar dan cepat.

#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;
}

Pemeriksaan Singkat

Uji pemahaman Anda tentang tabel pointer fungsi.

Ringkasan

Anda telah mempelajari pola pengiriman dengan tabel pointer fungsi:

  • Simpan pointer fungsi dalam array dan pilih berdasarkan indeks.
  • Tabel tersebut menggantikan rangkaian switch yang panjang dan dapat berkembang dengan menambahkan data.
  • Gunakan typedef dan tabel perintah berbasis struktur agar lebih jelas.
  • Selalu periksa batas indeks dan sediakan penangan bawaan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Tabel Pointer Fungsi” gratis?

Ya — teks lengkap “Tabel Pointer Fungsi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C Academy, upgrade ke CoddyKit PRO. Kursus C Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Tabel Pointer Fungsi”?

Pola dispatch. Kamu berlatih C Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C Academy?

Tidak diperlukan pengalaman sebelumnya. C Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Tabel Pointer Fungsi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C Academy ini?

Ya. Setiap pelajaran C Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mendeklarasikan Pointer Fungsi
  2. Meneruskan Fungsi
  3. qsort dengan Comparator
  4. Tabel Pointer Fungsi
← Kembali ke C Academy