函数指针作为一种数据类型,当然可以作为数组的元素类型。例如,要实现用菜单来驱动函数调用的程序框架,则用函数指针数组来实现就比较容易维护。

 #include<iostream>
using namespace std; typedef void(*MenuFun)();
void f1(){ cout << "good!\n"; }
void f2(){ cout << "better!\n"; }
void f3(){ cout << "best!\n"; } int main()
{
MenuFun fun[] = {f1,f2,f3};
for (int choice = ; choice;)
{
cout << "1-----display good\n"
<< "2-----display better\n"
<< "3-----display best\n"
<< "0-----display exit\n"
<< "Enter your choice:";
cin >> choice;
switch (choice)
{
case :fun[](); break;
case :fun[](); break;
case :fun[](); break;
case :return ;
default:cout << "you entered a wrong key.\n";
}
}
}

程序第4行首先定义了一个函数指针类型MenuFun。若前面无typedef,则后面部分就是一个函数指针定义,所以,正因为有了typedef,MenuFun就是函数指针的类型名,可以以此创建函数指针,但其本身并不是函数指针。

在第11行,根据MenuFun创建了一个函数指针数组fun,并予以初始化。初始化的值每个都是同类型的函数名,它们在第5、6、7行定义,接下来就是循环处理键盘输入,每当输入值为1,或2或3时,显示good、better、best等字样。同一功能的程序,也可以用向量来实现,当然从眼前的小结构程序来看,其方便性并不明显,以下是改用向量来实现的代码:

 #include<iostream>
#include<vector>
using namespace std; typedef void(*MenuFun)();
void f1(){ cout << "good!\n"; }
void f2(){ cout << "better!\n"; }
void f3(){ cout << "best!\n"; } int main()
{
vector<MenuFun> fun();
fun[] = f1, fun[] = f2, fun[] = f3;
for (int choice = ; choice;)
{
cout << "1-----display good\n"
<< "2-----display better\n"
<< "3-----display best\n"
<< "0-----display exit\n"
<< "Enter your choice:";
cin >> choice;
if (choice > && choice < ) fun[choice - ]();
else if (choice == ) return ;
else cout << "you entered a wrong key.\n";
}
}

C++ code:函数指针数组的更多相关文章

  1. C++基础——函数指针 函数指针数组

    ==================================声明================================== 本文版权归作者所有. 本文原创,转载必须在正文中显要地注明 ...

  2. typedef 函数指针 数组 std::function

    1.整型指针 typedef int* PINT;或typedef int *PINT; 2.结构体 typedef struct { double data;}DATA,  *PDATA;  //D ...

  3. C#委托与C语言函数指针及函数指针数组

    C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...

  4. C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组

    #include<stdio.h> #include<stdlib.h> #include<windows.h> /* 举列子说明什么是函数指针 */ //以一个加 ...

  5. C/C++ 不带参数的回调函数 与 带参数的回调函数 函数指针数组 例子

    先来不带参数的回调函数例子 #include <iostream> #include <windows.h> void printFunc() { std::cout<& ...

  6. C 函数指针数组

    名字有点绕口,其实更应该翻译为指针函数数组. 记录下对Head-First C这一节的理解,几乎每天班车上都会咪两眼,几乎每次都是看不懂,敲一敲的时候才有些明白. 通俗点讲,这功能解决的是,具有同种签 ...

  7. C语言的函数指针数组(好绕啊~看完这篇估计就通关了)

    转自https://www.cnblogs.com/chr-wonder/p/5168858.html int *(*p(int))[3] 今天有人问这个是啥?我一看直接就懵逼了…… 下面做一些简单的 ...

  8. c语言.函数指针数组

    函数指针: 一个指向函数的指针.一般用函数名表示. 函数指针数组:元素为函数指针的数组.转移表.c语言中函数不可以定义为数组,只能通过定义函数指针来操作. #include<stdio.h> ...

  9. 转:函数指针数组的妙用(I)

    转自:http://blog.sina.com.cn/s/blog_4c78b35f010008hi.html 笔者在开发某软件过程中遇到这样一个问题,前级模块传给我二进制数据,输入参数为 char* ...

随机推荐

  1. EasyUI的onLoadSuccess方法

    EasyUI加载表单的时候,对表单内行数据进行判断,可以赋颜色,也可以进行其他操作 onLoadSuccess:function(data) { for(var i=0;i<data.rows. ...

  2. python---ORM之SQLAlchemy(1)

    定义一个类,ORM(对象关系映射)将这个类转换为sql语句,使用pymysql进行执行 一,底层处理 使用engine/connectionpooling/dialect进行数据库操作,engine使 ...

  3. C# 中对于json的解析小结

    1.解析之前的json格式 [{ "Name": "冯111", "PID": "130627199202283306" ...

  4. A+B (带有,的数字)

    题目描述 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开. 现在请计算A+B的结果,并以正常形式输出. 输入描述: 输入包含多组数据数据,每组数据占一行,由 ...

  5. Keil MDK忽略警告:文件末尾空白行警告

    使用Keil MDK调试程序的时候,没有习惯在每个文件的末尾增加一个空白行,结果文件一多,编译时产生的警告就一大堆,排错都得用滚轮滚好久,就一个空白行还得出警告,烦死了,烦死了,烦死了!实在受不了了, ...

  6. win7防火墙端口开放

    https://jingyan.baidu.com/article/f96699bbadafca894f3c1b7a.html

  7. SRS+flv.js打造兼容性较高的直播、点播平台

    **************************************************************************************************** ...

  8. python渗透

    计划写一个获取qq空间加密相册的工具. 分析: 她的相册密码是手机号,先写一个生成手机号的脚本 空间有她之前的手机号,那么她现在的手机号也极有可能是一样的运营商,比如移动(缩小密码范围) 自己新建一个 ...

  9. move_base

    1>准备导航所需要的包. a.ros-indigo-gampping :我们不需要修改包内的东西,所以直接安装可执行文件就好了. sudo apt-get install ros-indigo- ...

  10. ubuntu 14.04 安装 eclipse

    在安装 eclipse 之前必须先安装 jdk 1. 卸载默认的 jdk,以防安装出错 sudo apt-get purge openjdk* 2. 安装 jdk1.8.0_111 下载jdk1.8. ...