Tác dụng của con trỏ hàm - QuânSysAd's Blog

28 tháng 6 2018

Tác dụng của con trỏ hàm

Con trỏ hàm công dụng có 2 cái chính:
Định danh tham chiếu, hay gọi là Interface kiểu hàm. Các ngôn ngữ bậc cao thì có khái niệm Interface; nhưng trong C/C++ không có? Trong C sẽ sử dụng qua con trỏ hàm, C++ có thể sử dụng qua virtual class (abstract)
Callback. Trong Java hay gọi là Listener, C# tương đương là delegate, trong các ngôn ngữ khác gọi là closure. Con trỏ hàm trong C/C++ sử dụng làm callback khá nhiều.
Áp dụng trong lập trình Windows API, MFC hay lập trình Linux.
Ta xem xét ví dụ sau:

#include 
 // A normal function with an int parameter
 // and void return type
 void fun(int a)
 {
     printf("Value of a is %d\n", a);
 }

 int main()
 {
     // fun_ptr is a pointer to function fun() 
     void (*fun_ptr)(int) = &fun;

     /* The above line is equivalent of following two
        void (*fun_ptr)(int);
        fun_ptr = &fun; 
     */

     // Invoking fun() using fun_ptr
     (*fun_ptr)(10);

     return 0;
 }
Kết quả ta có : Value of a is 10
Ở đây ta đã khai báo và định nghĩa một hàm fun. Sau đó ta tạo một con trỏ, trỏ tới hàm fun bằng:
void (*fun_ptr)(int) = &fun;
Có thể viết lại dòng trên bằng 2 dòng tương đương sau đây:
void (*fun_ptr)(int);
fun_ptr = &fun;
Lúc này ta gọi hàm fun() bằng cách sử dụng fun_ptr như sau:
(*fun_ptr)(10); Lưu ý ở đây ta đã khai báo kiểu của tham số là int nên không cần phải typecast về int trước.

Không có nhận xét nào: