0Pricing
C Academy · บทเรียน

การประกาศพอยน์เตอร์ฟังก์ชัน

พอยน์เตอร์ไปยังฟังก์ชัน

การประกาศพอยน์เตอร์ฟังก์ชัน เป็นบทเรียน C Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน

ฟังก์ชันก็มีแอดเดรส

เช่นเดียวกับข้อมูล ฟังก์ชันทุกฟังก์ชันจะอยู่ที่แอดเดรสหนึ่งในหน่วยความจำ พอยน์เตอร์ฟังก์ชันใช้เก็บแอดเดรสนั้น เพื่อให้คุณเรียกฟังก์ชันทางอ้อมได้

#include <stdio.h>

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

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

การอ่านส่วนประกาศ

ส่วนประกาศ int (*fp)(int) หมายความว่า fp เป็นพอยน์เตอร์ไปยังฟังก์ชันที่รับค่า int และคืนค่า int

ต้องมีวงเล็บรอบ *fp

#include <stdio.h>

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

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

การกำหนดฟังก์ชัน

ชื่อฟังก์ชันจะเปลี่ยนเป็นแอดเดรสของฟังก์ชันโดยอัตโนมัติ ดังนั้น fp = square และ fp = &square จึงมีความหมายเท่ากัน

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

การเรียกผ่านพอยน์เตอร์

คุณสามารถเรียกผ่านพอยน์เตอร์ฟังก์ชันด้วย fp(args) หรือเขียนอย่างชัดเจนด้วย (*fp)(args) ทั้งสองแบบทำงานเหมือนกัน

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

รูปแบบฟังก์ชันต้องตรงกัน

ชนิดของพอยน์เตอร์ฟังก์ชันประกอบด้วยชนิดค่าที่คืนและชนิดพารามิเตอร์ คุณกำหนดได้เฉพาะฟังก์ชันที่มีรูปแบบตรงกันทุกประการ

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

การกำหนดใหม่ขณะโปรแกรมทำงาน

พอยน์เตอร์ฟังก์ชันเป็นตัวแปรชนิดหนึ่ง ดังนั้นคุณจึงให้พอยน์เตอร์ชี้ไปยังฟังก์ชันต่าง ๆ ได้ระหว่างที่โปรแกรมทำงาน

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

การเลือกตามเงื่อนไข

เลือกฟังก์ชันที่จะเรียกตามค่าขณะโปรแกรมทำงาน แล้วเรียกฟังก์ชันผ่านพอยน์เตอร์เพียงตัวเดียว

#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 เพื่อให้อ่านง่าย

ไวยากรณ์ของพอยน์เตอร์ฟังก์ชันยาวและซับซ้อน การใช้ typedef ตั้งชื่อให้ชนิดข้อมูลจะทำให้ส่วนประกาศชัดเจนขึ้น

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

ฟังก์ชันที่รับสองอาร์กิวเมนต์

พอยน์เตอร์ฟังก์ชันสามารถอธิบายรูปแบบฟังก์ชันใด ๆ ได้ ตัวอย่างนี้เป็นฟังก์ชันสำหรับการดำเนินการจำนวนเต็มแบบไบนารี

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

พอยน์เตอร์ฟังก์ชันค่าว่าง

เช่นเดียวกับพอยน์เตอร์ข้อมูล พอยน์เตอร์ฟังก์ชันสามารถเป็น NULL ได้ ให้ตรวจสอบก่อนเรียกใช้พอยน์เตอร์ที่อาจยังไม่ได้กำหนดค่า

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

การพิมพ์แอดเดรส

คุณสามารถตรวจสอบแอดเดรสที่เก็บไว้ได้ ฟังก์ชันต่าง ๆ จะมีแอดเดรสต่างกัน

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

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเรื่องส่วนประกาศของพอยน์เตอร์ฟังก์ชัน

สรุป

คุณได้เรียนรู้การประกาศและใช้งานพอยน์เตอร์ฟังก์ชัน:

  • ไวยากรณ์คือ ret (*name)(params) โดยต้องมีวงเล็บ
  • กำหนดค่าด้วยชื่อฟังก์ชัน ซึ่งจะเปลี่ยนเป็นแอดเดรสโดยอัตโนมัติ
  • เรียกใช้ด้วย fp(args) หรือ (*fp)(args)
  • รูปแบบฟังก์ชันต้องตรงกัน และ typedef ช่วยให้อ่านง่ายขึ้น

คำถามที่พบบ่อย

บทเรียน “การประกาศพอยน์เตอร์ฟังก์ชัน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การประกาศพอยน์เตอร์ฟังก์ชัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การประกาศพอยน์เตอร์ฟังก์ชัน”

พอยน์เตอร์ไปยังฟังก์ชัน คุณปฏิบัติ C Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การประกาศพอยน์เตอร์ฟังก์ชัน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C Academy นี้ได้ไหม

ได้ บทเรียน C Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การประกาศพอยน์เตอร์ฟังก์ชัน
  2. การส่งฟังก์ชัน
  3. qsort กับตัวเปรียบเทียบ
  4. ตารางพอยน์เตอร์ฟังก์ชัน
← กลับไปที่ C Academy