【C】函数指针

目录

    • 函数指针
      • 1)定义
      • 2)声明和赋值
      • 3)通过函数指针调用函数
      • 4)用途:函数指针作为函数参数
      • 5)函数名和函数指针
      • 6)复杂一点的例子

函数指针

1)定义

在C语言中,函数指针是指向函数的指针变量。就像普通指针指向变量一样,函数指针指向函数。定义函数指针的一般形式如下:

return_type (*pointer_name)(parameter_types);

这里:

  • return_type 是函数返回类型,
  • pointer_name 是指针变量的名称,
  • parameter_types 是函数参数的类型。

2)声明和赋值

首先,我们需要声明一个函数指针,然后为其赋值。例如,考虑一个简单的函数:

int add(int a, int b) {
    return a + b;
}

现在,我们可以声明并赋值一个指向这个函数的函数指针:

int (*addPtr)(int, int);  // 声明函数指针
addPtr = add;             // 赋值函数指针

或者,你也可以在声明时直接赋值:

int (*addPtr)(int, int) = add;  // 直接声明并赋值函数指针

3)通过函数指针调用函数

使用函数指针调用函数的语法如下:

int result = addPtr(2, 3);

这将调用 add 函数,并将结果存储在 result 中。这就像直接调用函数一样,但是通过函数指针间接调用。

4)用途:函数指针作为函数参数

函数指针作用:常常用于将函数作为参数传递给其他函数。

这种技术在回调函数和事件处理等情况下很有用。

void processNumbers(int x, int y, int (*operation)(int, int)) {
    int result = operation(x, y);
    printf("Result: %d\n", result);
}

// 调用
processNumbers(4, 5, addPtr);  // 传递 add 函数的指针作为参数

5)函数名和函数指针

函数名本身就是一个指向函数的指针。

这是因为在C中,函数名可以被隐式转换为指向函数的指针。

当你使用函数名时,它会被编译器解释为该函数的地址,即函数的入口地址。

6)复杂一点的例子

typedef int (*Operation)(int, int); //给函数指针起一个别名,叫 Operation

int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

void processNumbers(int x, int y, Operation operation) {   //入口参数是一个函数指针
    int result = operation(x, y);
    printf("Result: %d\n", result);
}

int main() {
    Operation addPtr = add;  // 声明并赋值函数指针

    processNumbers(4, 5, addPtr);  // 通过函数指针调用函数

    return 0;
}

这个例子包括了函数指针的声明、赋值、传递,以及通过函数指针调用函数等方面。

总体来说,函数指针是一种强大的工具,它在C语言中用于实现许多高级的编程概念,如回调函数和动态函数调用。

你可能感兴趣的:(c语言,开发语言,学习,嵌入式)