【C/C++】函数指针

  • 简介

如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。函数指针有两个用途:调用函数和做函数的参数

C++函数指针(Function Pointers)是指向函数的指针变量。函数指针可以用于在程序中动态地调用不同的函数,具有很高的灵活性和扩展性。以下是关于C++函数指针的一些基本知识:

  • 用法

  1. 定义函数指针:

函数指针的定义方式类似于函数声明,只需将“函数声明”中的“函数名”改成“(*指针变量名)”。但是这里需要注意的是:“(*指针变量名)”两端的括号不能省略,括号改变了运算符的优先级。如果省略了括号,就不是定义函数指针而是一个函数声明了,即声明了一个返回值类型为指针型的函数。

定义方式:

函数返回值类型 (* 指针变量名) (函数参数列表);

例如:

int (*funcPtr)(int, int);  // 定义一个函数指针变量 funcPtr,指向返回类型为 int,接受两个 int 参数的函数
  1. 初始化函数指针:

    函数指针可以通过指向特定函数来进行初始化。例如:

    int sum(int a, int b) {
        return a + b;
    }
    
    // 初始化函数指针并指向 sum 函数
    int (*funcPtr)(int, int) = sum;
    
  2. 使用函数指针调用函数:

    使用函数指针调用函数与直接调用函数类似,只需在函数指针名后加上参数列表即可。例如:

    int result = funcPtr(3, 4);  // 调用通过函数指针指向的函数
    
  3. 函数指针作为函数参数:

    函数指针可以作为函数的参数传递给其他函数,从而实现回调函数等灵活的功能。例如:

    void printResult(int (*funcPtr)(int, int), int a, int b) {
        int result = funcPtr(a, b);
        cout << "Result: " << result << endl;
    }
    
    printResult(sum, 3, 4);  // 将 sum 函数指针作为参数传递给 printResult 函数
    
  4. 函数指针数组:

    函数指针可以存储在数组中,使得可以根据需要动态选择调用不同的函数。例如:

    int sum(int a, int b) {
        return a + b;
    }
    
    int subtract(int a, int b) {
        return a - b;
    }
    
    // 定义函数指针数组,存储指向不同函数的函数指针
    int (*funcArray[2])(int, int) = {sum, subtract};
    
    int result = funcArray[0](3, 4);  // 调用 funcArray 中存储的第一个函数指针指向的函数
    
  • 总结

函数指针在C++中是强大且灵活的工具,可以用于实现回调机制、动态函数调用等多种应用场景。请注意,函数指针的语法可能较为复杂,需要理解指针和函数声明的基本知识。

  • 补充

int (*fun)(int x,int y) //函数指针的定义
fun = &Function          //函数指针的赋值方式1
fun = Function           //函数指针的赋值方式2
x = (*fun)()             //函数指针的调用方式1
x = fun()                //函数指针的调用方式2

函数赋值的时候取地址运算符&不是必需的,因为一个函数标识符就表示了它的地址,并且赋值的时候函数不需要带圆括号;

如果是函数调用,还必须包含一个圆括号括起来的参数表。

你可能感兴趣的:(C++学习,C/C++,c++,c语言,开发语言)