函数指针是指向函数的指针变量它存储的是函数在内存中的地址。通过函数指针我们可以间接调用函数。函数指针声明语法返回类型 (*指针名) 参数列表;/***********************基本示例***********************/ #include stdio.h // 定义一些简单的函数 int add(int a, int b) { return a b; } int subtract(int a, int b) { return a - b; } int multiply(int a, int b) { return a * b; } int main() { // 声明函数指针 int (*operation)(int, int); // 将函数地址赋给指针 operation add; printf(5 3 %d\n, operation(5, 3)); operation subtract; printf(5 - 3 %d\n, operation(5, 3)); operation multiply; printf(5 * 3 %d\n, operation(5, 3)); return 0; }/**********************函数指针数组**********************/ #include stdio.h int add(int a, int b) { return a b; } int subtract(int a, int b) { return a - b; } int multiply(int a, int b) { return a * b; } int main() { // 函数指针数组 int (*operations[])(int, int) {add, subtract, multiply}; char operators[] {, -, *, /}; int a 10, b 5; for (int i 0; i 4; i) { printf(%d %c %d %d\n, a, operators[i], b, operations[i](a,%20b)); } return 0; }/**********************作为函数参数传递**********************/ #include stdio.h // 回调函数示例 void processArray(int arr[], int size, void (*callback)(int)) { for (int i 0; i size; i) { callback(arr[i]); } } void printDouble(int x) { printf(%d , x * 2); } void printSquare(int x) { printf(%d , x * x); } int main() { int numbers[] {1, 2, 3, 4, 5}; int size sizeof(numbers) / sizeof(numbers[0]); printf(原数组的两倍: ); processArray(numbers, size, printDouble); printf(\n); printf(原数组的平方: ); processArray(numbers, size, printSquare); printf(\n); return 0; }/**********************返回函数指针的函数**********************/ #include stdio.h int add(int a, int b) { return a b; } int multiply(int a, int b) { return a * b; } // 返回函数指针的函数 int (*getOperation(char op))(int, int) { switch (op) { case : return add; case *: return multiply; default: return NULL; } } int main() { int (*op)(int, int); op getOperation(); if (op ! NULL) { printf(3 4 %d\n, op(3, 4)); } op getOperation(*); if (op ! NULL) { printf(3 * 4 %d\n, op(3, 4)); } return 0; }/**********************C中的函数指针**********************/ #include iostream #include functional // 传统函数指针 int add(int a, int b) { return a b; } // 类成员函数指针示例 class Calculator { public: int multiply(int a, int b) { return a * b; } static int divide(int a, int b) { return b ! 0 ? a / b : 0; } }; int main() { // 1. 传统函数指针 int (*func1)(int, int) add; std::cout 3 5 func1(3, 5) std::endl; // 2. std::function (C11) std::functionint(int, int) func2 add; std::cout 4 6 func2(4, 6) std::endl; // 3. Lambda表达式 auto func3 [](int a,int b) { return a - b; }; std::cout 10 - 3 func3(10, 3) std::endl; // 4. 成员函数指针 Calculator calc; int (Calculator::*memberFunc)(int, int) Calculator::multiply; std::cout 4 * 5 (calc.*memberFunc)(4, 5) std::endl; // 5. 静态成员函数指针 int (*staticFunc)(int, int) Calculator::divide; std::cout 20 / 4 staticFunc(20, 4) std::endl; return 0; }