C Academy · Pelajaran

Mengisytiharkan Penuding Fungsi

Penuding kepada fungsi

Pelajaran 1 daripada 413 langkah

Mengisytiharkan Penuding Fungsi ialah pelajaran C Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C Academy merangkumi sejumlah 4 pelajaran.

Fungsi Mempunyai Alamat

Sama seperti data, setiap fungsi berada pada suatu alamat dalam memori. Penuding fungsi menyimpan alamat itu supaya anda boleh memanggil fungsi secara tidak langsung.

#include <stdio.h>

void greet(void) { printf("hello\n"); }

int main(void) {
    void (*fp)(void) = greet;
    fp();
    return 0;
}

Membaca Pengisytiharan

Pengisytiharan int (*fp)(int) bermaksud: fp ialah penuding kepada fungsi yang menerima int dan memulangkan int.

Tanda kurungan di sekeliling *fp diperlukan.

#include <stdio.h>

int square(int x) { return x * x; }

int main(void) {
    int (*fp)(int) = square;
    printf("%d\n", fp(5));
    return 0;
}

Menetapkan Fungsi

Nama fungsi merosot menjadi alamatnya, jadi fp = square dan fp = &square adalah setara.

#include <stdio.h>

int dbl(int x) { return x * 2; }

int main(void) {
    int (*fp)(int);
    fp = &dbl;
    printf("%d\n", fp(7));
    return 0;
}

Memanggil Melalui Penuding

Anda boleh memanggil melalui penuding fungsi dengan fp(args) atau (*fp)(args) yang ditulis secara jelas. Kedua-duanya melakukan perkara yang sama.

#include <stdio.h>

int add1(int x) { return x + 1; }

int main(void) {
    int (*fp)(int) = add1;
    printf("%d\n", fp(10));
    printf("%d\n", (*fp)(10));
    return 0;
}

Tanda Tangan Mesti Sepadan

Jenis penuding fungsi merangkumi jenis pulangan dan jenis parameter. Anda hanya boleh menetapkan fungsi yang tanda tangannya sepadan dengan tepat.

#include <stdio.h>

double half(double x) { return x / 2.0; }

int main(void) {
    double (*fp)(double) = half;
    printf("%f\n", fp(9.0));
    return 0;
}

Menetapkan Semula Semasa Masa Jalan

Penuding fungsi ialah pemboleh ubah, jadi anda boleh mengarahkannya kepada fungsi yang berbeza semasa atur cara berjalan.

#include <stdio.h>

int inc(int x) { return x + 1; }
int dec(int x) { return x - 1; }

int main(void) {
    int (*op)(int) = inc;
    printf("%d\n", op(5));
    op = dec;
    printf("%d\n", op(5));
    return 0;
}

Memilih Berdasarkan Syarat

Pilih fungsi yang hendak dipanggil berdasarkan nilai masa jalan, kemudian panggilnya melalui satu penuding.

#include <stdio.h>

int plus(int a) { return a + 10; }
int minus(int a) { return a - 10; }

int main(void) {
    int up = 1;
    int (*op)(int) = up ? plus : minus;
    printf("%d\n", op(100));
    return 0;
}

typedef untuk Kebolehbacaan

Sintaks penuding fungsi adalah panjang. typedef memberikan nama kepada jenis tersebut, lalu menjadikan pengisytiharan lebih jelas.

#include <stdio.h>

typedef int (*IntOp)(int);

int triple(int x) { return x * 3; }

int main(void) {
    IntOp op = triple;
    printf("%d\n", op(4));
    return 0;
}

Fungsi Dua Argumen

Penuding fungsi boleh menerangkan apa-apa tanda tangan. Berikut ialah satu penuding untuk operasi integer binari.

#include <stdio.h>

int sum(int a, int b) { return a + b; }

int main(void) {
    int (*op)(int, int) = sum;
    printf("%d\n", op(3, 4));
    return 0;
}

Penuding Fungsi NULL

Seperti penuding data, penuding fungsi boleh menjadi NULL. Sentiasa semak sebelum memanggil penuding yang mungkin belum ditetapkan.

#include <stdio.h>

int twice(int x) { return x * 2; }

int main(void) {
    int (*op)(int) = NULL;
    if (op == NULL) op = twice;
    if (op) printf("%d\n", op(8));
    return 0;
}

Mencetak Alamat

Anda boleh memeriksa alamat yang disimpan. Fungsi yang berbeza mempunyai alamat yang berbeza.

#include <stdio.h>

int f(int x) { return x; }

int main(void) {
    int (*fp)(int) = f;
    printf("function pointer is %s\n", fp ? "set" : "null");
    return 0;
}

Semakan Ringkas

Uji pemahaman anda tentang pengisytiharan penuding fungsi.

Imbas Kembali

Anda telah mempelajari cara mengisytiharkan dan menggunakan penuding fungsi:

  • Sintaks: ret (*name)(params) dengan tanda kurungan yang diperlukan.
  • Tetapkan menggunakan nama fungsi kerana nama itu merosot menjadi alamat.
  • Panggil dengan fp(args) atau (*fp)(args).
  • Tanda tangan mesti sepadan; typedef meningkatkan kebolehbacaan.
Percuma untuk bermula

Pelajari C dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
39
Pelajaran
144

Soalan Lazim

Adakah pelajaran “Mengisytiharkan Penuding Fungsi” percuma?

Ya — teks penuh “Mengisytiharkan Penuding Fungsi” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus C Academy, tingkat taraf kepada CoddyKit PRO. Kursus C Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Mengisytiharkan Penuding Fungsi”?

Penuding kepada fungsi Anda berlatih C Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan C Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran C Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Mengisytiharkan Penuding Fungsi” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran C Academy ini?

Ya. Setiap pelajaran C Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mengisytiharkan Penuding Fungsi
  2. Menghantar Fungsi
  3. qsort dengan Pembanding
  4. Jadual Penuding Fungsi
← Kembali ke C Academy