📜  C中的函数指针(1)

📅  最后修改于: 2023-12-03 14:40:25.312000             🧑  作者: Mango

C中的函数指针

在C中,函数是可以作为参数传递给其他函数的,而函数指针就是用来保存函数地址的。对函数指针的正确使用可以简化程序并提高代码重用性。

定义和声明函数指针

定义函数指针需要指定函数的返回类型和参数类型,例如:

int (*add)(int, int);

上述代码定义了一个指针变量add,它可以指向一个返回值为int类型,接受两个int类型参数的函数。

声明函数指针时,需要将函数名和指针类型用括号括起来,例如:

int (*add)(int, int);

上述声明表明add是一个指向函数的指针,它指向的函数返回值为int类型,接受两个int类型参数。

使用函数指针

有两种方式可以使用函数指针:直接调用函数和作为函数参数传递给其他函数。

直接调用函数

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

int (*add)(int, int) = sum;
int result = add(1, 2);

上述代码将指针变量add指向函数sum,并使用add调用了sum函数,将结果赋值给变量result。

作为函数参数传递给其他函数

将函数指针作为参数传递给其他函数时,需要使用指针类型作为参数类型,例如:

void operate(int (*func)(int, int), int a, int b) {
    int result = func(a, b);
    printf("The result is %d\n", result);
}

上述代码定义了一个operate函数,它接受一个函数指针作为参数,再将指针指向的函数应用到a和b参数上,并输出结果。

函数指针数组

由于函数指针本质上是一个指针变量,所以可以定义函数指针数组。函数指针数组的元素类型为函数指针类型,例如:

int (*math_ops[3])(int, int) = {sum, diff, multiply};

上述代码定义了一个长度为3的函数指针数组math_ops,数组的每个元素都是一个指向函数的指针,可以指向sum、diff或multiply。

总结

函数指针是C语言中重要的概念之一,使用函数指针可以简化程序,提高代码的可读性和重用性。合理的使用函数指针,可以在C语言中实现一些高级的编程技巧。