多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# C - 函数指针 > 原文: [https://beginnersbook.com/2014/01/c-function-pointers/](https://beginnersbook.com/2014/01/c-function-pointers/) 在 [C 编程语言](https://beginnersbook.com/2014/01/c-tutorial-for-beginners-with-examples/)中,我们可以有一个概念,称为**指向函数的指针**。在本教程中,我们将学习如何声明函数指针以及如何使用此指针调用函数。要理解这个概念,你应该具备[函数](https://beginnersbook.com/2014/01/c-functions-examples/)和[指针](https://beginnersbook.com/2014/01/c-pointers/)的基本知识。** ## 如何声明函数指针? ```c function_return_type(*Pointer_name)(function argument list) ``` 例如: ```c double  (*p2f)(double, char) ``` 这里`double`是函数的返回类型,`p2f`是函数指针的名称,`(double, char)`是这个函数的参数列表。这意味着此函数的第一个参数是`double`类型,第二个参数是`char`类型。 让我们借助一个例子来理解这一点:这里我们有一个函数`sum`,它计算两个数字的总和并返回总和。我们创建了一个指向此函数的指针`f2p`,我们使用此函数指针`f2p`调用该函数。 ```c int sum (int num1, int num2) { return num1+num2; } int main() { /* The following two lines can also be written in a single * statement like this: void (*fun_ptr)(int) = &fun; */ int (*f2p) (int, int); f2p = sum; //Calling function using function pointer int op1 = f2p(10, 13); //Calling function in normal way using function name int op2 = sum(10, 13); printf("Output1: Call using function pointer: %d",op1); printf("\nOutput2: Call using function name: %d", op2); return 0; } ``` **输出:** ```c Output1: Call using function pointer: 23 Output2: Call using function name: 23 ``` **关于函数指针的一些要点:** 1. 如注释中所述,您可以在单个语句中声明一个函数指针并为其赋值函数,如下所示: ```c void (*fun_ptr)(int) = &fun; ``` 2. 您甚至可以从此语句中删除`&`符号,因为单独的函数名称表示函数地址。这意味着上面的语句也可以这样写: ```c void (*fun_ptr)(int) = fun; ```