Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29344
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-10 15:39
个人简介

。。

文章分类

全部博文(7)

文章存档

2016年(7)

我的朋友

分类: C/C++

2016-06-05 11:54:13

注意 :想要弄懂函数指针,必须明白函数名即地址的概念
    虽然用起来感觉是比较麻烦,但有利于跟别人进行协同合作。

既然是一个函数指针,首先要弄懂什么是函数类型?
答:去掉函数名就是函数类型。
函数指针的定义无非就是用函数类型去定义一个指针。
例如: 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的变量,方便操作(不是必须)。

然后通过循环把数组中的函数实现一遍。

阅读(1162) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:结构体

给主人留下些什么吧!~~