指针变量可以指向任何类型的数据,也可以指向一个函数 。每个函数在内存中都占用一段存储单元,这段存储单元的首地址称为函数的入口地址,指向这个函数入口地址的指针称为函数指针 。1、函数指针基本用法:int max(int a, int b){ return a > b ? a : b;}int (*p) (int , int) = max;int x = 20, y = 30;int z = p(x, y);首先定义了一个max函数,函数接受两个int类型的参数并返回其中的最大值 。
int (*p) (int , int) = max;这行代码中定义了一个函数指针p,在定义函数指针时必须指明函数指针所指向函数的返回值和参数列表 。代码中的函数指针p所指向的函数的返回值为int类型,参数列表为两个int类型的参数,这与max函数的返回值和参数列表一致,因此可以用函数max初始化函数指针p 。
注:函数名等价于函数的入口地址
2、函数指针的定义和初始化
- 括号不能少
int *p (int, int) // p 是函数而非指针上面代码中的p不是一个函数指针,而是一个函数名 。代码声明了一个函数p,函数返回值类型为int* 类型,并且包括两个int类型的参数 。
- 在对函数指针初始化或者赋值的过程中,一定要保证函数的参数个数和类型与函数指针的定义相匹配 。
#include <stdio.h>#include <string.h>#include <stdlib.h>int add(int a, int b){ return a + b;}int minus(int a, int b){ return a - b;}int multi(int a, int b){ return a * b;}int divide(int a, int b){ return a / b;}int calculator(int a, int b, int(*Func)(int, int)){ return Func(a, b);}int main(){ int a = 40, b = 20; int res1 = calculator(a, b, add); printf("a + b = %d", res1); int res2 = calculator(a, b, minus); printf("a - b = %d", res2); int res3 = calculator(a, b, multi); printf("a * b = %d", res3); int res4 = calculator(a, b, divide); printf("a / b = %d", res4); system("pause"); return 0;}运行结果:
文章插图
4、typedef关键字的用法使用typedef关键字对函数指针类型重定义,并在定义函数指针时使用通过typedef重定义后的类型名 。
typedef int (*pFunc) (int, int);int calculator( int a, int b, pFunc func );
【C/C++中的函数指针】
推荐阅读
- 金骏眉的六大功效
- 华为HCIE眼中的虚拟化技术,看各路大咖“华山论剑”
- C语言和C++最大的区别
- 还不懂 Java 中的多线程?
- 编程中的基本数据结构与算法思想
- 跌打損傷藥酒的功效与作用
- 简单函数与温度转换 业余码农成长记——Python学习4
- 经络养生中的自我点穴方法
- 太极拳张志俊陈氏太极拳中的高手
- 红楼梦中的茶文化