Lý thuyết
Khái niệm
Những con trỏ thông thường thì sẽ lưu địa chỉ của biến. Còn con trỏ hàm thì sẽ lưu địa chỉ của một hàm.
Video: https://www.youtube.com/watch?v=ynYtgGUNelE
Cú pháp
kiểu trả về (*name)(tham số truyền)
Ví dụ:
void (*func)(void)
:- return: None
- param: None
void (*func)(int*, int)
:- return: None
- param: int*, int
- Còn rất nhiều ... Tùy thuộc vào nhu cầu.
Ứng dụng
Ví dụ 1
#include <stdio.h> typedef void (*func_ptr)(void); void print_obj1(void)
{ printf("Object 1\n");
} void print_obj2(void)
{ printf("Object 2\n");
} int main()
{ // Khai báo con trỏ hàm func_ptr p; p = print_obj1; p(); printf("dia chi ham print_obj1: %p\n", p); printf("dia chi ham print_obj2: %p\n", print_obj2); return 0;
}
Ouput
Object 1
dia chi ham print_obj1: 0x563524d35169
dia chi ham print_obj2: 0x563524d35183
dia chi ham print_obj3: 0x563524d3519d
Khi ta có địa chỉ của 1 hàm nào đó, thì ta có thể gọi trực tiếp nó để thực thi yêu cầu.
Ví dụ 2
#include <stdio.h> typedef void (*func_ptr)(int); void print_obj1(int id)
{ printf("Object %d\n", id);
} int main()
{ int id_obj1 = 1; // Khai báo con trỏ hàm func_ptr p; p = print_obj1; p(id_obj1); return 0;
}
Output
Object 1
dia chi ham print_obj1: 0x561a7d6c7149