注意 :想要弄懂函数指针,必须明白函数名即地址的概念。
虽然用起来感觉是比较麻烦,但有利于跟别人进行协同合作。
既然是一个函数指针,首先要弄懂什么是函数类型?
答:去掉函数名就是函数类型。
函数指针的定义无非就是用函数类型去定义一个指针。
例如: int pfun(int ,int ) // 这是一个普通函数,返回值为int型,参数为两个整型的数据
找到函数类型 : int (int , int)
定义函数指针 : int (*pfun)(int ,int ) //带上参数, 类型一致。
比如一工程师写了两个函数,如下:
int add(int a , int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
那我想要调用他们,如果每次都要改一次函数,当需求更改的时候就很麻烦。于是,我可以这样写。
第一种方法:
可以声明一个函数指针变量: int(*pfun)(int ,int);
当我要调用功能函数的时候,就把函数地址赋值给pfun,然后通过pfun调用就行。
pfun = add;
ret = pfun(3,4);
第二种方法:
int calc(int (*pfun)(int ,int ),int a ,int b)
{
int ret;
ret = pfun(int a, int b);
return ret;
}
//calc函数中声明了一个参数为函数指针(参数必须一致才行),每个函数的函数名即是函数指针类型;
ret = calc(add ,3,4);// 调用calc,即是调用add函数
那如果函数有很多个,我们又想全部都函数都实现一遍呢,一个一个调用肯定非常麻烦。既然函数是指针,那咱们就把函数指针放到数组里去,那就是函数指针数组了,例如我把add 和sub放数组里去,当然函数数量少就没必要了。
首先声明一个函数指针数组: int (*pfun_array[])(int ,int ) = {add,sub,NULL};
注意:在指针数组和数组存放字符串 这两种情况当中,我们通常习惯在最后加一个NULL的变量,方便操作(不是必须)。
然后通过循环把数组中的函数实现一遍。
阅读(1165) | 评论(0) | 转发(0) |