Lý thuyết
Con trỏ hàm là gì?
Con trỏ hàm là một biến lưu trữ địa chỉ của một hàm, thông qua biến đó, ta có thể gọi hàm mà nó trỏ tới.
Cú pháp khai báo:
kiểu_trả_về (*tên_con_trỏ)(danh_sách_tham_số);
Gán địa chỉ của hàm cho con trỏ hàm
// khai báo prototype
int funcA();
int funcB();
void funcC();
double funcD(int a);
int main()
{
int(*fcnPtr)() = funcA(); // lỗi, không dùng dấu ngoặc đơn () sau tên hàm
int(*fcnPtrA)() = funcA; // ok, con trỏ fcnPtrA trỏ đến hàm funcA
fcnPtrA = funcB; // ok, fcnPtrA có thể trỏ đến một hàm khác có cùng cấu trúc
// fcnPtrA = &funcB; tương tự câu lệnh trên
int(*fcnPtr1)() = funcA; // ok
void(*fcnPtr2)() = funcA; // lỗi, kiểu trả về của con trỏ hàm và hàm không trùng nhau
void(*fcnPtr3)() = funcC; // ok
double(*fcnPtr4)(int) = funcD; // ok
return 0;
}
Lưu ý: Cấu trúc (tham số và kiểu trả về) của con trỏ hàm phải khớp với cấu trúc của hàm.
Gọi một hàm bằng con trỏ hàm
#include< iostream>
using namespace std;
void swapNumber(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
void(*ptrSwap) (int &, int &) = swapNumber;
int a = 5, b = 10;
cout << "Before: " << a << " " << b << endl;
// gọi hàm tường minh
(*ptrSwap)(a, b);
cout << "After: " << a << " " << b << endl;
// hoặc gọi hàm ngầm định
ptrSwap(a, b);
cout << "After: " << a << " " << b << endl;
return 0;
}
Đọc thêm: tại đây
Bài tập rèn luyện
Những bài tập không giải quyết được các bạn ấn vào Trao đổi trên thanh tiêu đề và post lên cho mọi người cùng giải quyết phụ bạn nhé !
Không có bài tập cho slide này !
- Hoàn thành 99% khóa học
- Phần 1: Giới thiệu
- 2/2
- Phần 2: Kiến thức cốt lõi
- 16/16
1. Cout và Comment
5:48
2. Biến, khai báo biến
5:39
3. Hằng, Cin
6:50
4. Kiểu dữ liệu
6:25
5. Toán tử, thư viện math
8:06
6. Câu điều kiện IF
5:55
7. Câu điều kiện switch
6:02
8. Toán tử 3 ngôi
6:17
9. Vòng lặp for
4:26
10. Vòng lặp while/do-while
7:08
11. Break/continue
4:13
12. Tổng quan về mảng
5:55
13. Các thao tác với mảng
14:17
14. Chuỗi || Dây
4:45
15. Hàm
6:27
16. Hàm đệ quy
10:52
- Phần 3: Con trỏ (phần CB)
- 4/4