C语言函数指针

C语言函数指针教程

C 语言 中,函数指针是一个 指针,该指针存放的是一个 函数 的地址,而函数的名称就是函数的入口,即地址,要注意与 指针函数 的区别。

指针函数是指带指针的函数,即本质是一个函数,指针函数是返回指向某种类型指针的函数,如 int * pFunc(int a) 就是一个指针函数。

C语言函数指针详解

定义

returnType (*funcName) (paramType param);

参数

参数 描述
returnType 该函数的返回类型。
funcName 函数名。
paramType 函数参数的类型。
param 函数参数。

说明

我们定义了一个函数指针 funcName,其返回值类型为 returnType,接受一个 paramType 类型的参数。

案例

定义函数指针

定义一个函数指针,并调用

#include <stdio.h> int sum(int num1, int num2) { return num1 + num2; } int main() { printf("嗨客网(www.haicoder.net)\n\n"); int a = 1024, b = 1100; int retSum = sum(a, b); printf("retSum = %d, sum = %p\n", retSum, sum); return 0; }

程序运行后,控制台输出如下图所示:

43_C语言函数指针.png

我们首先,定义了一个函数 sum,该函数接受两个 int 类型的参数,并返回这两个 int 类型参数的和。接着,我们在 main 函数定义了两个 int 类型的变量,并使用 sum 函数进行求和。

最后,我们打印了求得的和以及打印了函数名,最后,我们发现其实函数名,就是一个地址,既然是一个地址,那我们就可以使用一个指针来保存函数名的地址,我们修改程序如下:

#include <stdio.h> int sum(int num1, int num2) { return num1 + num2; } int main() { printf("嗨客网(www.haicoder.net)\n\n"); int num1 = 100, num2 = 200; int (*pSum)(int a,int b) = sum; int (*pSum2)(int a, int b) = &sum; int retSum1 = pSum(num1, num2); int retSum2 = pSum2(num1, num2); printf("pSum = %p, pSum2 = %p\n", pSum, pSum2); printf("retSum1 = %d, retSum2 = %d\n", retSum1, retSum2); return 0; }

程序运行后,控制台输出如下图所示:

44_C语言函数指针.png

这次,我们在 main 函数里面定义了两个函数指针,这两个函数指针分别指向了函数名,和函数名的地址,最后,我们调用了函数指针,实现了求两个数的和。

同时,我们可以看到,对函数名取地址和直接打印函数名,最终的结果一致。

C语言函数指针总结

在 C 语言中,函数指针是一个指针,该指针存放的是一个函数的地址,而函数的名称就是函数的入口,即地址。