การประกาศพอยน์เตอร์ฟังก์ชัน
พอยน์เตอร์ไปยังฟังก์ชัน
การประกาศพอยน์เตอร์ฟังก์ชัน เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การประกาศพอยน์เตอร์ฟังก์ชัน
- การส่งฟังก์ชัน
- qsort กับตัวเปรียบเทียบ
- ตารางพอยน์เตอร์ฟังก์ชัน