Function pointer là gì?
- ★
- ★
- ★
- ★
- ★
Con trỏ hàm (function pointer) còn được gọi là con trỏ chương trình con (subroutine pointer) hoặc con trỏ thủ tục (procedure pointer), là một con trỏ (pointer) trỏ đến một hàm (function). Trái ngược với việc tham chiếu (reference) đến một giá trị dữ liệu, một con trỏ hàm trỏ (function pointer) đến mã thực thi (executable code) trong bộ nhớ (memory). Dereferencing con trỏ hàm (function pointer) tạo ra hàm được tham chiếu, hàm này có thể được gọi và truyền đối số (argument) giống như trong một lời gọi hàm (function call) bình thường. Một lời gọi như vậy còn được gọi là lời gọi "gián tiếp", bởi vì hàm đang được gọi gián tiếp thông qua một biến thay vì trực tiếp thông qua một định danh (identifier) hoặc địa chỉ (address) cố định.
Con trỏ hàm (function pointer) có thể được sử dụng để đơn giản hóa mã bằng cách cung cấp một cách đơn giản để chọn một hàm để thực thi dựa trên các giá trị ở runtime.
Con trỏ hàm (function pointer)được hỗ trợ bởi các ngôn ngữ lập trình thế hệ thứ ba (third-generation programming language) chẳng hạn như PL / I, COBOL, Fortran, dBASE dBL và C và các ngôn ngữ lập trình hướng đối tượng (chẳng hạn như C++, C # và D).
Cách triển khai (implementation) đơn giản nhất của con trỏ hàm (function pointer) là một biến (variable) chứa địa chỉ của hàm trong bộ nhớ thực thi. Các ngôn ngữ thế hệ thứ ba cũ hơn như PL/I và COBOL, cũng như các ngôn ngữ hiện đại hơn như Pascal và C thường triển khai các con trỏ hàm theo cách này.
Chương trình C sau đây minh họa việc sử dụng con trỏ hàm (function pointer).
#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;
}
Output:
Value of a is 10
Learning English Everyday